非root环境下搭建spark集群
用3台机器(节点)作为实例来演示如何搭建Spark集群,主机名分别为node1,node2和node3
配置ssh免密登录
需要采用ssh让master服务器能够免密登录其他两台服务器。
生成公私密钥。
ssh-keygen -t rsa
修改authorized_keys
的权限为600,.ssh
文件夹权限为700。
cat id_rsa.pub>>authorized_keys
chmod 600 authorized_keys
chmod 700 /home/hadoop/.ssh #hadoop为用户名
可以使用ssh localhost
验证本机是否能够免密登录。
将主服务器的公钥拷贝到其他两个服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@XXX.XXX.XXX.XXX #@后面为服务器对应的IP地址
在其他两个服务器上将公钥加入authorized_keys
。
cat id_rsa.pub>>authorized_keys
chmod 600 authorized_keys
chmod 700 /home/hadoop/.ssh #hadoop为用户名
配置hosts文件
此步骤需要管理员权限
vim /etc/hosts
在hosts文件中编译如下内容:
XXX.XXX.XXX.XXX node1 #XXX.XXX.XXX.XXX为服务器对应的ip地址
XXX.XXX.XXX.XXX node2
XXX.XXX.XXX.XXX node3
安装JDK
手动安装,执行如下shell命令
mkdir /home/hadoop/java/jvm
cd Downloads #JDK安装包jdk-8u162-linux-x64.tar.gz所在位置
tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /home/hadoop/java/jvm
修改环境变量
export JAVA_HOME=/home/hadoop/java/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
执行如下命令让.bashrc文件的配置立即生效:
source ~/.bashrc
使用如下命令查看是否安装成功:
java -version
安装hadoop
下载安装包后解压即可,我们选择将Hadoop安装在用户主目录的hadoop文件夹中
sudo tar -zxf ~/Downloads/hadoop-3.1.3.tar.gz -C ~/hadoop
cd ~/hadoop
mv ./hadoop-3.1.3/ ./hadoop
chown -R hadoop ./hadoop
可以输入以下命令检查Hadoop是否可用,可用会显示Hadoop版本信息:
cd ~/hadoop/hadoop
./bin/hadoop version
安装spark
下载安装包后解压即可,我们选择将Spark安装在用户主目录的Spark文件夹中
sudo tar -zxf ~/Downloads/spark-2.4.0-bin-without-hadoop.tgz -C ~/spark
cd ~/spark
mv ./spark-2.4.0-bin-without-hadoop/ ./spark
修改hadoop配置文件
有六个文件需要修改,都在/home/hadoop/hadoop/etc/hadoop
文件夹下
hadoop-env.sh
在文件末尾加入如下内容:
export JAVA_HOME=/home/hadoop/java/jvm/jdk1.8.0_162
core-site.xml
该文件中增加如下内容,下面的node1:8020
,node1
对应的就是hosts文件下的node1的ip
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node1:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>node1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>node1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>node1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>node1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>node1:8088</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
</configuration>
works
在works文件下写入两个子节点的名字,都是在hosts文件中配好了ip。
1 node2
2 node3
主服务配置完成,将hadoop文件夹拷贝到其他两个服务器。
修改spark配置文件
works
node1
node2
spark-env.sh
export SPARK_DIST_CLASSPATH=$(/home/haddoop/hadoop/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/home/haddoop/hadoop/hadoop/etc/hadoop
export SPARK_MASTER_IP=XXX.XXX.XXX.XXX