在Hadoop和Spark集群搭建好了以后,如果我们需要向集群中发送、获取文件,或者是执行MapReduce、Spark作业,通常是搭建一个外围的、集群的客户端,在这个客户端上进行操作。而不是直接在集群的NameNode或者DataNode上进行。此时,集群和客户端的结构如下图所示(简化图,没有考虑NameNode的高可用),本文将介绍如何快速搭建一个集群客户端(有时也叫gateway)。
说明:在网络配置方面,可以遵循集群仅开放内网访问,而客户端开放外网访问,所有对集群的访问和管理,均通过客户端来完成。
配置步骤:
假设客户端的主机名是dc1(DataClient1的缩写,192.168.0.150),Hadoop集群中的NameNode主机名是hadoop01(192.168.0.34)。
1)ssh免密:
可选,方便后面scp拷贝文件。
修改hosts,添加机器名(可选)
2)拷贝文件:
需要将hadoop01上的Hadoop、spark和Java文件夹复制到dc1的对应位置即可。将文件拷贝到dc1的root用户下。
注意:dc1的目录结构要和hadoop01的保持一致
3)创建用户、修改环境变量:
在dc1上,创建hadoop用户,例如:useradd hadoop
然后修改hadoop用户的环境变量:~/.bash_profile
export JAVA_HOME=/usr/local/jdk/
export HADOOP_HOME=/usr/local/service/hadoop
export HBASE_HOME=/usr/local/service/hbase
export SPARK_HOME=/usr/local/service/spark
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$SPARK_HOME/bin
4)验证:
su - hadoop
hadoop fs -ls /
spark-shell
hbase shell
执行hadoop fs -ls / 可能会报如下错误:Error: Could not find or load main class org.apache.hadoop.fs.FsShell
解决方法:在~/.bash_proflile中添加 export HADOOP_CLASSPATH=$(hadoop classpath):$HADOOP_CLASSPATH