一:hadoop客户端配置
1.软件要求:
hadoop2.60-cdh5.13(感觉要求不是很严格,版本兼容性很好,后来证明我错了,hive-1.1.0-cdh5.13,要求必须是hadoop-cdh5.13的,具体的hadoop2.X或者其他不知道,但是cdh必须是5.13,不然会出现hive能创建表和插入数据,但是却无法查看的问题。)
jdk1.8
2.配置流程:
cm-server web页面上下载hdfs和yarn的客户端配置:(后来同事发现,可以在机器的/etc/hadoop/conf.cloudera.yarn目录下找到所有的cm集群上的客户端配置,故一会可以从本地拷贝客户端配置文件,还有就是下载的haoop-conf和yarn-conf其实yarn-conf已经包含了hadoop-conf,但是文件好像还略有不同,不过我都是先复制hadoop-conf,后复制yarn-conf,所以只需要yarn-conf的配置文件就满足需求了,故本地只需要拷贝/etc/hadoop/conf.cloudera.yarn目录下的文件即可)
hadoop-conf:
yarn-conf:
然后放到机器上的hadoop/etc/hadoop/下,配置环境变量后看hadoop fs -ls / 查看能否正常使用。
注:后来发现一个问题,不能把cm上下载的 hadoop-env.sh放到,客户端hadoop/etc/hadoop/下,否则在运行hadoop测试jar包wordcount时会出现如下问题(找不到hadoop_class路径):
hadoop jar /opt/beh/core/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.13.1.jar wordcount /input /output/output1
测试文件自己上传到/input下,然后/output/output1这个路径必须不存在,hadoop自己创建,查看结果查看用hdfs dfs -cat /output/output1/*
报错如下:
java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/lib/partition/InputSampler$Sampler
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.(ProgramDriver.java:59)
at org.apache.hadoop.util.ProgramDriver.addClass(ProgramDriver.java:103)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.lib.partition.InputSampler$Sampler
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
有两个解决办法:
1).在/opt/beh/conf/beh_env,配置export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/beh/core/hadoop/share/hadoop/mapreduce/*
然后source。(或者直接在linux命令行 运行 export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/beh/core/hadoop/share/hadoop/mapreduce/*,临时生效)
2).从根源上解决问题,把hadoop/etc/hadoop/hadoop-env.sh换成官方的原配置文件,不用cm上下载的hadoop-env.sh
注:后来测试cm web页面配置跟本地配置是否一致,然后就开始找/etc/hadoop/conf/*,结果并没有cm上的配置,最后在/opt/cm-5.13.1/cloudera-scm-agent/process/129-hdfs-DATANODE/hdfs-site.xml里面发现了跟cm页面一样的配置。需要注意的是,如果你在cm页面修改了相关的hdfs-site.xml,也就是datanode的一些配置的时候,重启服务后,你再次进入这个本地目录,你会发现里面的东西没有修改,那是因为服务重启,pross进程号换了,这个配置文件在另一个进程下,eg:/opt/cm-5.13.1/cloudera-scm-agent/process/489-hdfs-DATANODE/,这个很重要。
3.如果hadoop用户需要拥有hdfs上其他用户目录(eg: /hbase hbase:hbase ......)的写入权限,那么需要配置cm集群的yarn(去web页面上配置,直接在客户端配置yarn-site.xml不好使):
修改yarn.acl.enable,把false改为true,然后重启集群,重新下载客户端配置,重新配置客户端。
现在假如需要hbase用户在hdfs目录上的权限,那么需要在hdfs用户下执行:
hadoop fs -setfacl -R -m user:hadoop:rwx /hbase
这样hadoop用户就可以操作hdfs上的 /hbase目录了。
4.如果hadoop用户想要在显示为 hdfs:supergroup 权限的路径上有写的权限,那么可以在hdfs用户下执行:
hadoop fs -chmod (-R) a+w 路径
二:hbase客户端配置
1.环境要求
hadoop2.6.0客户端
jdk-1.8
2.软件
在 http://archive-primary.cloudera.com/cdh5/cdh/5/ 上下载hbase-1.2.0-cdh5.13.0.tar.gz。
3.在cm-server web页面上下在hbase客户端配置,内容如下:
4.查看hbase-env.sh的内容:
5.解压hbase-1.2.0-cdh5.13.0.tar.gz
6.把hbase客户端配置文件的所有配置复制到hbase-1.2.0-cdh5.13.0/conf下,除了hbase-env.sh
7.修改hbase-1.2.0-cdh5.13.0/conf/hbase-env.sh:
把hbase客户端配置文件hbase-env.sh的那两句话,复制到hbase-1.2.0-cdh5.13.0/conf/hbase-env.sh里面,然后在hbase-1.2.0-cdh5.13.0/conf/hbase-env.sh另外添加export JAVA_HOME=***,同时配置export HBASE_MANAGES_ZK=false,表示禁用hbase自带的zk。
8.配置环境变量或者直接在hbase-1.2.0-cdh5.13.0/bin/下启动hbase shell,观察能否正常启动。
三:hive客户端配置
1.软件要求:
hadoop客户端
jdk1.8
2.在 http://archive-primary.cloudera.com/cdh5/cdh/5/ 上下载hive-1.1.0-cdh5.13.0.tar.gz,解压。
3.在cm上下载hive客户端配置:
hive-conf内容:
3.把hive客户端配置文件所有文件都放到hive-1.1.0-cdh5.13.0下,全部,包括hive-env.sh。
4.修改hive-1.1.0-cdh5.13.0/conf/hive-env.sh:(仅修改HADOOP_CONF_DIR)
修改前:
修改后:
5.配置环境变量,启动hive,验证结果。
四:spark客户端配置
1.软件要求:
hadoop客户端
hive客户端
jdk1.8
scala-2.11.8(可选,有人告诉我spark自带scala)
2.软件ApacheSpark2.2.1
3.解压后,把hadoop客户端配置的core-site.xml,hdfs-site.xml,yarn-site.xml,和hive客户端配置的hive-site.xml,放到spark/conf目录下
4.然后配置spark-env.sh:
export HADOOP_CONF_DIR=/opt/beh/core/hadoop/etc/hadoop
export YARN_CONF_DIR=/opt/beh/core/hadoop/etc/hadoop
export JAVA_HOME=/opt/beh/core/jdk1.8.0_151
export SCALA_HOME=/opt/beh/core/scala2.11.8
export JRE_HOME=$JAVA_HOME/jre
export HADOOP_HOME=/opt/beh/core/hadoop
export SPARK_HOME=/opt/beh/core/spark-2.2.0
export SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$SPARK_HOME/bin:$PATH
export SPARK_LOG_DIR=/opt/beh/core/spark/${USER}
================线上最简化配置===============
export YARN_CONF_DIR=/opt/beh/core/hadoop/etc/hadoop
export SPARK_LOG_DIR=/opt/beh/logs/spark/${USER}
5.配置环境变量后运行spark pi测试样例:(--queue 对列名:可以指定队列提交到yanr上)
spark-submit --class org.apache.spark.examples.SparkPi --master yarn /opt/beh/core/spark/examples/jars/spark-examples_2.11-2.2.1.jar
6.报错:找不到/etc/hadoop/conf.cloudera.yarn,在cm集群上的一台resourcemanager节点上,cp这个目录,然后按照rm节点的权限对客户端的/etc/hadoop,和/etc/hadoop/conf.cloudera.yarn进行权限的设置,要保证跟rm节点的权限一样。
7.再次运行pi样例检测结果
8.配置spark-sql
cp hive客户端/conf/hive-site.xml到spark-2.2.1/conf/目录下,然后运行spark-sql,进去后,执行show databases,看执行结果是否和hive执行结果一样。
9.检查spark提交到yarn上的日志,可以用这条命令:
yarn logs -applicationId