mac安装hadoop2-client
文章目录
- 1. 环境背景
- 1. 公司的大数据平台是基于CDH搭建的
- 2. 使用了kerberos 作为权限管理
- 2. 安装方式
- 1. 在其他centos服务器上的安装测试
- 1. 安装配置kerberos
- 2. 安装client包
- 2. 在mac上安装hadooop2 client
- 1. 安装配置kerberos
- 2. 安装hadoop client
- 3. 噩梦开始
- 4. 增加debug功能
- 5. 原来mac和centos的ticket存储的位置不一样
- 6. 原来还有加密问题
1. 环境背景
1. 公司的大数据平台是基于CDH搭建的
Hadoop的发行版本有很多,有华为发行版,Intel发行版,Cloudera发行版(CDH),MapR版本,以及HortonWorks版本等。所有发行版都是基于Apache Hadoop衍生出来的,产生这些版本的原因,是由于Apache Hadoop的开源协议决定的:任何人可以对其进行修改,并作为开源或商业产品发布和销售。
不收费的版本主要有三个(都是国外厂商):
- Cloudera版本(Cloudera’s Distribution Including Apache Hadoop)简称"CDH"。
- Apache基金会hadoop
- Hontonworks版本(Hortonworks Data Platform)简称"HDP"。
我们公司的平台主要是基于CDH搭建的,hadoop的版本是2.6
[deploy@hbase03 ~]$ hadoop version
Hadoop 2.6.0-cdh5.15.1
服务器的系统是centos6.8
[deploy@hbase03 ~]$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.8 (Final)
Release: 6.8
Codename: Final
2. 使用了kerberos 作为权限管理
之前没有怎么了解过kerberos,只是大概知道类似私钥公钥的管理模式,在这里不展开太多,
具体的想了解可以参考这里 and 这里
这里只介绍一下client端需要做的设置
- xxx.keytab文件(存储了用户信息以及秘钥)
- krb5.conf 文件(定义了kerberos的一些基本信息,比如ream域,加密方式等等)
xxx.keytab 一般放到 /etc/keytab/xxx.keytab
krb5.conf 必须放到 /etc/krb5.conf
2. 安装方式
我的目标是想在本地(macos)安装一个hadoop client,能够访问stag环境的hadoop集群。结果没有想到这个这么难以实现,都把我整哭了。
1. 在其他centos服务器上的安装测试
实际上在这一步之前我已经在mac上折腾一波了,但是死活不行,所以又退回来在centos的服务器上装一个试试。
当前的centos服务器用户是deploy
1. 安装配置kerberos
安装
yum install krb5-workstation krb5-libs krb5-auth-dialog -y
从hadoop的机器上copy xxx.keytab文件,krb5.conf文件,分别放到 /etc/keytab, /etc目录
mv deploy.keytab /etc/keytab/deploy.keytab
mv krb5.conf /etc/krb5.conf
执行kinit 产生票据
[deploy@server-02 ~]$ kinit -kt /etc/keytab/deploy.keytab deploy
[deploy@server-02 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_501
Default principal: deploy@SAMPLE.COMValid starting Expires Service principal
07/31/20 10:22:32 08/01/20 10:22:32 krbtgt/SAMPLE.COM@SAMPLE.COMrenew until 07/31/20 10:22:32
2. 安装client包
使用CDH安装的好像还挺复杂的,用了很多shell做封装,简单看一下结构
对应的目录在 /home/deploy/hadoop_client_test/hadoop2-client/
[deploy@server-02 hadoop_client_test]$ pwd
/home/deploy/hadoop_client_test[deploy@server-02 hadoop_client_test]$ tree -L 3 hadoop2-client/
hadoop2-client/
│
├── bin
│ ├── hadoop
│ ├── hdfs
│ └── yarn.cmd
├── conf -> hadoop2-conf
├── hadoop1-conf
│ ...
│ └── topology.py
├── hadoop2-conf
│ ├── core-site.xml
│ ├── hadoop-env.sh
│ ├── hdfs-site.xml
│ ├── log4j.properties
│ ├── ssl-client.xml
│ ├── topology.map
│ └── topology.py
├── lib
│
├── libexec
│ ├── hadoop-config.sh
│ ├── hdfs-config.sh
│ ├── httpfs-config.sh
│ ├── kms-config.sh
│ ├── mapred-config.sh
│ └── yarn-config.sh
├── sbin
└── share
为了方便理解,我把和shell运行原理没有关系的全部都干掉了,只保留了相关的一部分来进行解释。
下面的解释主要是为了搞清hdfs命令最后如何选择hadoop的配置
总体的调用逻辑是这样的,当前的目录是在 hadoop2-client
当我运行 ./bin/hdfs
的时候,hdfs是一个shell文件,他会做以下的事情
- 设置BIN_DIR=${./bin}
- 设置HADOOP_LIBEXEC_DIR=${./libexec},并执行export, export HADOOP_LIBEXEC_DIR=xxx ,让子进程能够拿到
- 执行${HADOOP_LIBEXEC_DIR}/hdfs-config.sh, 也就是上面的
./libexec/hdfs-config.sh
- 没有其他处理逻辑执行${HADOOP_LIBEXEC_DIR}/hadoop-config.sh,也就是上面的
./libexec/hadoop-config.sh
- 设置DEFAULT_CONF_DIR ,也就是hadoop集群相关的一些配置
- 如果存在./conf/hadoop-env.sh 则 DEFAULT_CONF_DIR=conf 也就是上面的通过超链接又指向了
hadoop2-conf
的conf
,在当前的配置下回选中这个 - 反之,如果
./conf/hadoop-env.sh
不存在,会使用./etc/hadoop
在CDH的集群上都是走的这个
- 如果存在./conf/hadoop-env.sh 则 DEFAULT_CONF_DIR=conf 也就是上面的通过超链接又指向了
- 设置DEFAULT_CONF_DIR ,也就是hadoop集群相关的一些配置
- 没有其他处理逻辑执行${HADOOP_LIBEXEC_DIR}/hadoop-config.sh,也就是上面的
- 下面就是各种根据参数运行hdfs命令了
然后执行下面的命令
[deploy@server-02 hadoop2-client]$ ./bin/hdfs dfs -ls /Found 5 items
drwxrwxrwx - deploy supergroup 0 2020-05-29 19:16 /flink
drwx------ - hbase hbase 0 2020-06-30 10:23 /hbase
drwxrwx--- - mapred supergroup 0 2020-07-15 10:40 /home
drwxrwxrwt - hdfs supergroup 0 2020-07-28 10:04 /tmp
drwxrwxrwx - hdfs supergroup 0 2020-07-28 10:04 /user
至此,成功在centos上面装上hadoop2的client,可以操作hdfs。
2. 在mac上安装hadooop2 client
mac上的用户是admin
1. 安装配置kerberos
brew install krb5
剩下的配置和contos上的配置保持一致。
执行 kinit
➜ ~ kinit -kt /etc/keytab/deploy.keytab deploy
➜ ~ klist
Ticket cache: KCM:501
Default principal: deploy@SAMPLE.COMValid starting Expires Service principal
07/31/20 15:50:54 08/01/20 15:50:54 krbtgt/SAMPLE.COM@SAMPLE.COMrenew until 07/31/20 15:50:54
可以看到到也是正常产生了ticket
2. 安装hadoop client
同样的套路,这个也不再赘述。
3. 噩梦开始
在执行hdfs命令之后,噩梦开始
./bin/hdfs dfs -ls /
报错如下
20/07/30 19:04:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
20/07/30 19:04:38 WARN security.UserGroupInformation: PriviledgedActionException as:admin (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
20/07/30 19:04:38 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
20/07/30 19:04:38 WARN security.UserGroupInformation: PriviledgedActionException as:admin (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
20/07/30 19:04:38 WARN security.UserGroupInformation: PriviledgedActionException as:admin (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
20/07/30 19:04:38 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
20/07/30 19:04:38 WARN security.UserGroupInformation: PriviledgedActionException as:admin (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
20/07/30 19:04:38 INFO retry.RetryInvocationHandler: Exception while invoking getFileInfo of class ClientNamenodeProtocolTranslatorPB over bj3-stag-all-hbase02.tencn/10.76.0.100:8020 after 1 fail over attempts. Trying to fail over immediately.
java.io.IOException: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "localhost/127.0.0.1"; destination host is: "bj3-stag-all-hbase02.tencn":8020;at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:772)at org.apache.hadoop.ipc.Client.call(Client.java:1472)at org.apache.hadoop.ipc.Client.call(Client.java:1399)at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)
...at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)
Caused by: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:680)at java.security.AccessController.doPrivileged(Native Method)at org.apache.hadoop.ipc.Client.call(Client.java:1438)... 28 moreCaused by: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]... 31 more
Caused by: GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:122)at sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:187)at sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:224)at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:212)at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:192)... 40 more
只是截取了一部分异常,而且将异常栈去掉了一部分,要不然太长了。
这个报错显示的很显然是没有可用的kerberos tgt ,也就是鉴权没有通过。同时在报错中可以看到as:admin
字样,让我一度怀疑是因为我本地是admin账户而不是deploy账户?
因为前面看一些相关资料里面hadoop好像还需要专门对keytab中的用户进行处理,主要是理解的不到位,怀疑有可能是这个问题,参考这里有对hadoop使用keytab解析的说明,说实话这里还是理解的不到位,后来的配置也感觉keytab用户好像和本地用户没有什么关系,除非是有些地方理解依然有偏差。
这个时候心一横,本地创建了一个deploy用户,一堆权限问题,总算把权限问题搞定了,执行hdfs命令发现还是报一样的错,无非是报错的admin换成了deploy,绝望。
不死心,后来通过多方google,终于发现一个解决类似问题的方案。
4. 增加debug功能
原来hadooop可以在运行的时候打开kerberos的debug功能,这样就可以更进一步看看问题出在哪里了
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true ${HADOOP_OPTS}"
再执行同样的命令
./bin/hdfs dfs -ls /
报错信息基本上和之前一样,但是在最开头报出来了这样的信息
Java config name: null
Native config name: /etc/krb5.conf
Loaded from native config
>>>KinitOptions cache name is /tmp/krb5cc_501
>> Acquire default native Credentials
default etypes for default_tkt_enctypes: 17 16 23.
>>> Found no TGT's in LSA
20/07/30 20:16:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable...
...
这里面说了 KinitOptions cache name is /tmp/krb5cc_501
也就是会在/tmp/krb5cc_501 文件中找对应的ticket,记得在执行klist的时候看到过类似的信息
5. 原来mac和centos的ticket存储的位置不一样
在mac上执行了klist
➜ ~ klist
Ticket cache: KCM:501
Default principal: deploy@SAMPLE.COMValid starting Expires Service principal
07/31/20 15:50:54 08/01/20 15:50:54 krbtgt/SAMPLE.COM@SAMPLE.COMrenew until 07/31/20 15:50:54
cache位置是KCM:501
在centos再看看
[deploy@server-02 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_501
Default principal: deploy@SAMPLE.COMValid starting Expires Service principal
07/31/20 10:22:32 08/01/20 10:22:32 krbtgt/SAMPLE.COM@SAMPLE.COMrenew until 07/31/20 10:22:32
[deploy@server-02 ~]$
这里是 FILE:/tmp/krb5cc_501
,原来是这里不一致导致的。
结合debug日志用显示需要的是/tmp/krb5cc_501
那么我们生成ticket的时候需要在对应的目录才行。
kinit -c FILE:/tmp/krb5cc_501 -kt /etc/keytab/deploy.keytab deploy➜ klist -c FILE:/tmp/krb5cc_501
Ticket cache: FILE:/tmp/krb5cc_501
Default principal: deploy@SAMPLE.COMValid starting Expires Service principal
07/30/20 20:50:08 07/31/20 20:50:08 krbtgt/SAMPLE.COM@SAMPLE.COMrenew until 07/30/20 20:50:08
开心,终于算是找到一点解决问题的思路
小心翼翼的执行
./bin/hdfs dfs -ls /
果然,扑面而来的还是满屏的报错
mac安装hadoop2-client相关推荐
- mongodb mac安装_在Mac OS X上安装MongoDB
mongodb mac安装 Today we will install MongoDB on Mac OS X. MongoDB is one of the leading NoSQL databas ...
- Mac 安装 pip 看这里就够了,pip、pip2、pip3 再也不懵了
Mac 安装 pip 看这里就够了,pip.pip2.pip3 再也不懵了 啥是 pip ? pip is the package installer for Python. You can use ...
- Mac安装ruby环境及Xcode安装cocoapods整体流程--ios引用第三方库的环境准备
发文原由:ios刚用来开发不久,需要在开发时引用第三方库,百度查找了资料,需要先安装ruby环境,再进行cocoapods安装 一.mac安装ruby环境 (引用博客–https://www.cnbl ...
- Mac安装--locust压力测试
Mac安装--locust压力测试 在mac上搭建locust压力测试服务器 1:进入管理员模式 # sudo su 2:查看python版本 sh-3.2# python -V Python 2.7 ...
- 在Linux操作系统内安装PacketiX ××× Client (客户端)的步骤
在Linux操作系统内安装PacketiX ××× Client (客户端)的步骤 进入虚拟机linux5红帽版后,进行如下操作: 点击右键,选择"打开终端"进入命令行操作 进入命 ...
- Mac安装虚拟环境(VM)
目录 引言 Mac 安装步骤 M1 based Mac 安装步骤 引言 Running the virtualization environment could take up to 15GB of ...
- Windows 10下编译安装Hadoop2.6
转自:https://www.linuxidc.com/Linux/2016-08/134131.htm Windows 10下安装Hadoop2.6,Windows10下编译64位Hadoop2.x ...
- Docker for mac安装
Mac安装Docker docker下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac docker for m ...
- mac 安装mqtt
2019独角兽企业重金招聘Python工程师标准>>> mac 安装mqtt Mosquitto是一个开源的mqtt规则的具体实现库,mosquitto是一个轻量级的lightwei ...
最新文章
- spring boot项目配置RestTemplate超时时长
- php正则判断字符串是否含有中文
- LoadRunner 脚本语言认识
- SAP Spartacus B2B Popover Directive 和 Popover Component 的生命周期管理
- vs2010中引入boost库
- python画图库哪个好_机器学习基础5--python画图库matplotlib(上)
- 2012021402
- 【Python】表格文件处理
- oracle日期处理函数
- python numpy数据类型_Python中numpy的数据类型,python,dtype
- python matplotlib包图像配色方案
- js 图表处理之Echar
- 人工神经网络matlab啊6,基于MATLAB6.x的BP人工神经网络的土壤环境质量评价方法研究...
- 2019“华为杯”第十六届研究生数模竞赛F题一等奖7/2790方案
- 用Mac安装homebrew的时候报错解决方法
- 华硕raid 0 安装linux,ROG Maxius IX主板技巧篇:组建RAID 0
- Windows11桌面图标变成空白
- 声源定位系统设计(一)——MVDR波束形成算法
- @Before, @BeforeClass, @BeforeEach 和 @BeforeAll之间的不同
- 数学_有趣的有理数(绘制有理数)