开发者学堂课程【快速掌握 Hadoop 集成 Kerberos 安全技术:配置 HDFS-配置 core-site-hdfs-size 以及 env.sh 等配置文件】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/708/detail/12564
配置 HDFS-配置 core-site-hdfs-size 以及 env.sh 等配置文件
内容介绍:
一、`hadoop-env.sh`增加
二、yarn-env.sh 增加
三、mapred-env.sh 增加
四、配置 core-site.xml
五、配置`hdfs-site.xml
一.`hadoop-env.sh`增加
机器 cdh1 cd/bigdata/hadoop-26.0-cdh5.14.4/etc/hadoop 目录下是需要运行的配置文件。
[root@cdh1native]#cd/bigdata/hadoop-26.0-cdh5.14.4/etc/hadoop
修改 vim hadoop-env.sh 将以下内容复制粘贴
export JAVA_HOME=/usr/local/jdk1.8.0_221
export HADOOP_HOME=/bigdata/hadoop-26.0-cdh5.14.4
export HADOOP_CONF_DIR=/bigdata/hadoop-26.0-cdh514.4/et
/hadoop
export HADOOP_L0G_DIR=/bigdata/hadoop-26.0-cdh5.14.4/logs/
hdfs
export HADOOP_COMMON_LIB_NATIVE_DIR=SHADOOP_HOME/lib/
native
Export HADOOP_0PTS="-Djava.library.path=${HADOOP_HHOME}/li
b/native
#路径根据具体自己配置的路径修改
主要复制 JAVA_HOME、HADOOP_HOME、HADOOP_CONF、HADOOP_L0G_DIR 文件夹的地方、本地运行库 lib/native 位置在哪。配置完成后点保存。
二.yarn-env.sh 增加
配置 vim yarn-env.sh
[root@cdh0 hadoop]#vim yarn-env.sh 添加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_221
export YARN_CONF_DIR=/bigdata/hadoop-2.6.0-cdh5.14.4/etc/h
adoop
export YARN_L0G_DIR=/bigdata/hadoop-2.6.0-cdh5.14.4/logs/ya
rn
根据自己路径具体配置
三.mapred-env.sh 增加
配置 vim mapred-env.sh 添加以下内容
[root@cdh0 hadoop]#vim mapred-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_221
保存
四、配置 core-site.xml
hadoop 核心 site
复制以下内容,粘贴,保存
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cdh0.itcast.cn:8020</value>
<description></description></property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description></description></property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
<description>
是否开启hadoop的安全认证</description>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
<description>
使用kerberos作为hadoop的安全认证方案</description></property>
<property>
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[2:$1@$0](nne*ITCAST.CN)s/.*/hdfs/ RULE:[2:$1@$0](sn@*ITCAST.CN)s/.*/hdfs/ RULE:[2:$1@$0](dn@.*ITCAST.CN)s/.*/hdfs/ RULE:[2:$1@$0](nm@.*ITCAST.CN)s/.*/yarn/ RULE:[2:$1@$0](rm@.*ITCAST.CN)s/.*/yarn/ RULE:[2:$1@$0](tl@.*ITCAST.CN)s/.*/yarn/
RULE:[2:$1@$0](jhs@.*ITCAST.CN)s/.*/mapred/ RULE:[2:$1@$0](HTTP@.*ITCAST.CN)s/.*/hdfs/ DEFAULT
</value>
<description>匹配规则,比如第一行就是表示将 nn/*@ITCA
ST.CN的 principal 绑定到 hdfs 账户上,想要得到一个认证后的 hdfs 账户,使用 Kerberos 的 nn/*@ITCAST.CN 账户来认证
同理,下面的 HTTP 开头的 Kerberos 账户,也是绑定到了 hdfs 本地账户上,如果想要操作 hdfs,用 nn 和 http 都可以,在逻辑上多创建几 kerbero 账户好分配,比如 namen
od 分配 nn,datanode 分配给 dn 其实 nn 和 dn 都是对应的 hdfs</description>
</property>
<!-- HIVE KERBEROS-->
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hivegroups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuserhdfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.HTTP.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.HTTPgroups</name>
<value>*</value>
</property>
<property>
<name></name>
<value></value>
</property>
</configuration>
执行 [root@cdh0 hadoop]#vim core-site.xml 内容为空,将复制内容放入,将 property 复制粘贴。有<description>简单描述,保存。
<name>fs.defaultFS</name>
<value>hdfs://cdh0.itcast.cn:8020</value>
hadoop
默认的 FS 路径。
hadoop.security.true
开启 hadoop 的安全认证,使用 Kerberos作为 hadoop 的安全认证方案。
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[2:$1@$0](nne*ITCAST.CN)s/.*/hdfs/ RULE:[2:$1@$0](sn@*ITCAST.CN)s/.*/hdfs/ RULE:[2:$1@$0](dn@.*ITCAST.CN)s/.*/hdfs/ RULE:[2:$1@$0](nm@.*ITCAST.CN)s/.*/yarn/ RULE:[2:$1@$0](rm@.*ITCAST.CN)s/.*/yarn/ RULE:[2:$1@$0](tl@.*ITCAST.CN)s/.*/yarn/
RULE:[2:$1@$0](jhs@.*ITCAST.CN)s/.*/mapred/ RULE:[2:$1@$0](HTTP@.*ITCAST.CN)s/.*/hdfs/ DEFAULT
将 Kerberos 账户对应到本地账户,匹配规则,比如第一行是表示满足 nn/*@ITCAST.CN 规则的 principal 绑定到 hdfs 账户上,想得到一个认证后的 hdfs 账户,使用 Kerberos 满足 nn/*@ITCAST.CN 规格的账户认证。比如 nn/cdh0@ITCAST.CN、cdh1@ITCAST.CN。满足规格的账户认证得到被授权的 hdfs 账户,可以访问 hadoop 集群同时拥有最高权限。如果没有满足规格的账户授权认证,hdfs 账户为普通账户,没有权限访问 hadoop 集群。
同理,下面的 HTTP 开头的 Kerberos 账户,满足规则,可以映射到 hdfs 本地账户,如果想 hdfs 账户被认证成功,用 nn 和 http 都可以得到授权后的 hdfs 账户。
<!-- HIVE KERBEROS-->
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuserhdfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.HTTP.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.HTTPgroups</name>
<value>*</value>
</property>
<property>
<name></name>
<value></value>
</property>
</configuration>
HIVE 相关配置,proxyuser 给*,groups 给*
五、配置 hdfs-site.xml
configuration 为空
[root@cdh0 hadoop]#vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
<descriotion>Path on the local filesystem where the Name
Node stores the namespace and transactions logs persist
ently.</description>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>cdh1.itcast.cncdh2.itcast.cn</value>
<description>List of permitted DataNodes.</description>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
<description></description>
</property>
<property>
<name>dfs.namenodehandler.count</name>
<value>100</value>
<description></description>
</property>
<description></description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<!-- NameNode security config -->
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>nn/_HOSTITCAST.CN</value>
<description>namenode 对应的 kerberos 账户为 nn/主机名@IT
CAST.CN _HOST 会自动转换为主机名 </description>
</property>
<property>
<name>dfs.namenode.keytabfile</name>
<!-- path to the HDFS keytab-->
<value>/etc/securitv/kevtabs/nn.service.keytab</value>
<description>使用-randkey 创建的用户密码随机不知道,需要用免密登录的 keytab 文件指定 namenode 需要用的 keytab 文件在哪里</description>
</property>
<property>
<name>dfs.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@ITCAST.CN</value>
<description>https
相关(如开启namenodeUI)使用的账户
</description></property>
<!--Secondary NameNode security config-->
<property>
<name>dfs.secondary.namenode.kerberos.principal</name>
<value>sn/_HOST@ITCAST.CN</value>
<description>secondarynamenode
使用的账户</description></pr
operty>
<property>
<name>dfs.secondary.namenode.keytab.file</name>
<!-- path to the hDFS keytab -->
<value>/etc/security/keytabs/snservice.keytab</value>
<description>sn
对应的 keytab 文件</description>
</property>
<property>
<name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@ITCAST.CN</value>
<description>sn
需要开启http页面用到的账户</description>
</property>
<!-- DataNode security config -->
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>dn/_HOsT@ITCAST.CN</value>
<description>datanode
用到的账户 </descriptioon>
</property>
<property>
<name>dfs.datanode.keytab.file</name>
<!-- path to the HDFS keytab -->
<value>/etc/security/keytabs/dn.service.keytab</value>
<description>datanode
用到的 keytab 文件路径</description>
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.web.authenticationkerberos.principal</name<value>HTTP/_HOST@ITCAST.CN</value>
<description>web hdfs
使用的账户</description>
</property><property>
<name>dfs.web.authentication.kerberos.keytab</name>
<!-- path to the HDFS keytab-->
<value>/etc/security/keytabs/sn.service.keytab</value>
<description>sn
对应的 keytab 文件</description>
</property>
<property>
<name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@ITCAST.CN</value>
<description>sn
需要开启 http 页面用到的账户</description>
</property>
<!-- DataNode security config --><property>
<name>dfs.datanode.kerberos.principal</name>
<value>dn/_HOsT@ITCAST.CN</value>
<description>datanode
用到的账户</description>
</property>
<property>
<name>dfs.datanode.keytab.file</name>
<!-- path to the HDFS keytab -->
<value>/etc/security/keytabs/dn.service.keytab</value>
<description>datanode
用到的 keytab 文件路径</description>
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value></property>
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>HTTP/_HOST@ITCAST.CN</value>
<description>web hdfs
使用的账户</description>
</property>
<property>
<name>dfs.web.authentication.kerberos.keytab</name>
</property>
<value>/etc/security/keytabs/spnego.service.keytab</value>
<description>
对应的 keytab 文件</description>
</property>
<property>
<name>dfs.permissions.supergroup</name>
<value>hdfs</value>
</property>
<property>
<name>dfs.http.policy</name>
<value>HTTPS_ONLY</value>
<description>
所有开启的 web 页面均使用 https,细节在ssl server 和 client 配置文件内配置</description>
</property>
<property>
<name>dfs.data.transfer.protection</name>
<value>integrity</value>
</property><property>
<name>dfs.https.port</name>
<value>50470</value>
</property>
</configuration>
普通的 hadoop 配置项 namenode、blocksize 等。
NameNode security config 中 dfs.namenode.kerberos.principal
配置。指定namenode 程序 kerberos 对应的账户 nn/_HOST@ITC
AST.CN,_动态解析主机名。如果 namenode 运行在 cdh0,自动转化为 nn/cdh0.itcast.cn@ITCAST.CN,将 _HOST 转换为具体的主
机名。
NameNode 创建的 kerberos 账户为 nn/cdh0.itcast.cn@ITCAST.C
N,cdh0.itcast.cn 对应_,在哪个机器上跑转变为哪个机器账户。可以改成 nn/cdh0.itcast.cn@ITCAST.CN 固定写法。账户有对应的 keyta
b,不可能一直坐在电脑前输入密码,需要免密的东西,自动拿到密码,告诉keytab 路径 dfs.secondary.namenode.kerberos.principal。
namenode 需要使用 HTTP 相关的,namenode 界面可帮助监控集群情况,打开浏览器可查看。浏览器页面需要使用 HTTPS,使用 kerberos 不能使用普通的 HTTP,只能使用 HTTPS。使用 HTTPS 需要认证,HTTP/_HOST@ITCAST.CN,_HOST
进行主机名转换。
如果 namenode 运行在 cdh0 就相当于 HTTP/cdh0.itcast.cn@ITC
AST.CN
免密登录文件etc/security/keytabs/spnego.service.keytab second
ary.namenode 需要 HTTPS 端口 HTTP/_HOST@IT.CN 账户,共用一个账户。
datanode 需要使用账户dn/_HOST@ITCAST.CN,kerberos,文件存放在哪里 etc/security/keytabs/dn.service.keytab
dfs.datanode.data.dir.perm
创建 datanode 目录权限,默认700。
dfs.web.authentication.kerberos.principal 外网授权
HTTP/_HOST@ITCAST.CN
HTTP
账户使用哪一个
etc/security/keytabs/spnego.service.keytab keytab
在哪里。
dfs.http.policy HTTPS_ONLY
说明所有使用 web 页面均使用 https,不使用 https 不能工作,使用 keytabs 安全。
dfs.https.port 写到50470
如果使用 HTTPS 有相关证书,证书配置在 ssl server 和 client 配置文件内配置。