为了将Hadoop和Spark的安装简单化,今日写下此帖。
首先,要看手头有多少机器,要安装伪分布式的Hadoop+Spark还是完全分布式的,这里分别记录。
1. 伪分布式安装
伪分布式的Hadoop是将NameNode,SecondaryNameNode,DataNode等都放在一台机器上执行,Spark同理,一般用于开发环境。
1.1 准备工作
系统准备:一台Ubuntu16.04机器,最好能够联网
准备好四个安装包:jdk-8u111-linux-x64.tar.gz,scala-2.12.0.tgz,hadoop-2.7.3.tar.gz,spark-2.0.2-bin-hadoop2.7.tgz
1.2 配置SSH免密码登录
SSH是集群不同机器间实现自由数据传输通信的根本保障。安装完成后试试ssh到本机是否需要密码即可。
sudo apt-get install ssh openssh-server # 安装SSH ssh-keygen -t rsa -P "" cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 配置秘钥 service ssh start # 启动SSH服务
1.3 解压四个软件包并配置环境变量
解压四个软件包:
tar -zxvf jdk-8u111-linux-x64.tar.gz sudo mv jdk1.8.0_111 /usr/lib/ # 解压JDK并移动到/usr/lib/下 tar -zxvf scala-2.12.0.tgz sudo mv scala-2.12.0 /usr/lib/ # 解压scala并移动到/usr/lib/下 tar -zxvf hadoop-2.7.3.tar.gz # 解压hadoop包 tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz # 解压spark包
配置环境变量:
当前用户的环境变量位于~/.profile,root用户的环境变量位于/etc/profile。这里我们将环境变量按当前用户配置。vim ~/.profile
vim ~/.profile # 打开环境变量 # 添加下面的变量 export JAVA_HOME=/usr/lib/jdk1.8.0_111 export SCALA_HOME=/usr/lib/scala-2.12.0 export HADOOP_HOME=/home/user/hadoop-2.7.3 export SPARK_HOME=/home/user/spark-2.0.2-bin-hadoop2.7 export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 保存后使其立即生效 source ~/.profile
1.4 配置Hadoop
需要配置三个文件:core-site.xml,mapred-site.xml,hdfs-site.xml。
在core-site.xml中添加如下信息:
vim hadoop-2.7.3/etc/hadoop/core-site.xml # 打开文件 <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/user/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
在mapred-site.xml中添加如下信息:
cp hadoop-2.7.3/etc/hadoop/mapred-site.xml.template hadoop-2.7.3/etc/hadoop/mapred-site.xml # 复制一份 vim hadoop-2.7.3/etc/hadoop/mapred-site.xml # 打开文件 <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
在hdfs-site.xml中添加如下信息,其中replication是机器数量,此处为1,user为当前用户名:
vim hadoop-2.7.3/etc/hadoop/hdfs-site.xml # 打开文件 <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/user/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/user/hadoop/tmp/dfs/data</value> </property> </configuration>
如果在启动Hadoop时找不到环境变量,可以在hadoop-2.7.3/etc/hadoop/hadoop-env.sh中明确:export JAVA_HOME=/usr/lib/jdk1.8.0_111
1.5 配置Spark
Spark只需要配置spark-env.sh文件。
vim /home/user/spark-2.0.2-bin-hadoop2.7/conf/spark-env.sh # 打开文件 export JAVA_HOME=/usr/lib/jdk1.8.0_111 export SCALA_HOME=/usr/lib/scala-2.12.0 export SPARK_MASTER_HOST=localhost #单机下配置为localhost export HADOOP_CONF_DIR=/home/user/hadoop-2.7.3/etc/hadoop/ #hadoop配置目录 export SPARK_WORKER_MEMORY=8g #给spark分配8G内存 export SPARK_WORKER_CORES=16 #允许spark以16核并行运算 # 配置项很多,请参考文件中的提示
1.6 启动Hadoop和Spark
先格式化hadoop的HDFS(分布式文件系统),这是必要的步骤,否则NameNode无法启动。但也不需要每次启动Hadoop时都格式化,否则会造成Data和Name不兼容,使得DataNode无法启动,若出现这种情况,删掉tmp/data/current/下的VERSION文件。重新格式化HDFS即可。
启动Hadoop和Spark命令为:
$HADOOP_HOME/bin/hdfs namenode -format # 格式化HDFS
$HADOOP_HOME/sbin/start-all.sh # 启动Hadoop
$SPARK_HOME/sbin/start-all.sh # 启动Spark
启动后,输jps命令,若Hadoop的DataNode,NameNode,SecondaryNameNode,***Manager都启动,Spark的Master和Worker都启动,则集群成功启动,缺一不可。
此时,访问http://localhost:50070可访问Hadoop集群Web任务查看页面,访问http://localhost:8080可访问Spark集群Web任务查看页面。
注意:如果装的是双系统,ubuntu访问ntfs盘符可以使用这条命令激活:ntfsfix /dev/sda5
2. 完全分布式安装
顾名思义,完全分布式安装是真正的集群部署,一般用于生产环境。
2.1 准备工作
系统准备:一台Ubuntu16.04机器作为master(ip:192.168.1.1),最好能够联网;1台及其以上Ubuntu16.04机器作为slave节点(ip:192.168.1.2 ...)
准备好四个安装包:jdk-8u111-linux-x64.tar.gz,scala-2.12.0.tgz,hadoop-2.7.3.tar.gz,spark-2.0.2-bin-hadoop2.7.tgz
2.2 配置SSH免密码登录
SSH是集群不同机器间实现自由数据传输通信的根本保障。安装完成后试试ssh到本机是否需要密码即可。
此处步骤与1.2中相同,但是要将master上的RSA秘钥拷贝到其他机器,实现机器间自由访问。
scp ~/.ssh/id_rsa.pub user@slave01:/home/user/ # 远程拷贝RSA秘钥 ssh slave01; # 登录slave01 mkdir ~/.ssh;cat ~/id_rsa.pub >> ~/.ssh/authorized_keys;exit; # 将秘钥生成公钥并退出 ssh slave11; # 重新连接看是否需要密码,自动登录则成功
依次类推,对所有的slave节点做相同操作,最后实现master到任意slave节点的SSH无密码登录。
此外,我们还需要对每台机器上的hosts文件做配置,以实现SSH到hostname即可访问机器,无需显式IP地址。
sudo vim /etc/hosts # 打开hosts # 存入下面的IP与hostname映射 192.168.1.1 master 192.168.1.2 slave01 192.168.1.3 slave02 192.168.1.4 slave03 ...
依次类推,对所有的slave节点做相同操作。
2.3 解压四个软件包并配置环境变量
在master主节点机器上解压四个软件包和配置环境变量,与1.3相同,不同的是,还需要通过scp命令将配置好的jdk和scala整体拷贝到其他从节点。
2.4 配置Hadoop
需要配置三个文件:core-site.xml,mapred-site.xml,hdfs-site.xml,slaves。
前三个与1.4都相同,只需将localhost改成master(主节点的hostname名),replication改成具体的机器个数。
最后,还需要通过scp命令将配置好的hadoop整体拷贝到其他从节点。
2.5 配置Spark
Spark只需要配置spark-env.sh文件,这一步与1.5相同。最后,通过scp命令将配置好的spark整体拷贝到其他从节点。
2.6 启动Hadoop和Spark
在主节点上启动hadoop和spark,通过jps验证是否成功启动集群。
到此,您就可以在单机上用Eclipse或Intellij做开发,在集群上运行整个集群任务咯!