搭建Spark集群详细步骤(1)
构建Spark集群(1)
构建spark集群经典4部曲:
1.搭建hadoop单机和伪分布式环境
2.构造分布式hadoop集群
3.构造分布式spark集群
4.测试spark集群
第一步 搭建hadoop单机和伪分布式环境
开发hadoop需要的基本软件
安装每个软件
配置hadoop单机模式,并运行Wordcount示例
配置hadoop伪分布式模式,并运行wordcount示例
1.1开发hadoop需要的基本软件
虚拟机
ubuntu 16.04版本
jdk-8
1.2安装每个软件
一般需要2到3个虚拟机
安装虚拟机之后,为了简化权限问题,下面以root用户的身份登录和使用ubuntu系统,默认情况下,ubuntu系统并没有开启root用户,需要我们做如下设置:
1.sudo -s 进入root用户权限模式
2.vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
修改配置文件
3.在里面添加如下内容:
[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true #手工输入登陆系统的用户名和密码
allow-guest=false #不允许 guest 登录
4.启动root账号 sudo passwd root
5.重新启动系统
注:如果现在用root登录有错误,读取/root/.profile时发生错误:mesg:tty n,还需要进行如下修改。
sudo vim /root/.profile
将mesg n替换成 tty -s && mesg n
1.3配置hadoop单机模式并运行wordcount示例
1安装ssh
(1)使用命令: apt-get install ssh
(2)安装ssh后启动服务 etc/init.d/ssh start
(3)以下命令验证服务是否正常启动: ps -e |grep ssh
(4)设置免密码启动,生成私钥和公钥 ssh-****** -t rsa -P ""
在/root/.ssh 中生成两个文件:id_rsa 和 id_rsa.pub,id_rsa 为私钥,id_rsa.pub 为 公钥,我们将公钥 id_rsa.pub 追加到 authorized_keys 中,因为 authorized_keys 用于保 存所有允许以当前用户身份登录到 ssh 客户端用户的公钥内容: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(5)检查能否免密码登录ssh: ssh localhost
输入yes继续
使用exit
可以退出localhost。
再次登录localhost就不需要密码了
2.安装rsync
apt-get install rsync
这个已经默认安装了
3.安装hadoop
这里选用2.7.4版本
(1)创建/usr/local/hadoop文件,并将下载的hadoop解压到该目录下。
mkdir /usr/local/hadoop
在下载位置解压hadoop
tar xzf hadoop-2.7.4-bin.tar.gz
mv hadoop-2.7.4 /usr/local/hadoop
(2)在hadoop-env.sh配置java信息 cd /usr/local/hadoop/hadoop-2.7.4/etc/hadoop
vim hadoop-env.sh
设置JAVA_HOME和PATH export JAVA_HOME=java的路径
export PATH=$PATH:/usr/local/hadoop/hadoop-2.7.4/bin
注查看jdk路径的方式
whereis java
可能会显示多个路径(如果不是自己安装的情况下)
ls -l /usr/bin/java 看看这是否是个软连接,找出这个软连接指向的路径即可
发现输出的信息,显示还是个软连接,继续找出, ls -l /etc/alternatives/java
发现输出的信息,显示还是个软连接,继续找出,ls /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
这个就是最后的java路径了。
(3)修改完之后,保存退出,编译 source hadoop-env.sh
(4)验证hadoop版本信息,使用hadoop version 命令即可
(5)为了方便我们在开机启动后也能够方便的使用hadoop/bin下的命令,可以把bin文件配置到~/.bashrc文件中,这样就可以在任何目录中使用hadoop命令了.
打开~/.bashrc文件
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:/usr/local/hadoop/hadoop-2.7.6/bin:$PATH
保存退出之后,编译 source ~/.bashrc
(6)运行hadoop自带的wordcount示例
首先在 hadoop 的目录下创建一个 input 目录并把etc/hadoop下的所有文件 copy 到该目录 下,需要如下命令即可: mkdir input
cd etc/hadoop
cp * ../../input
然后使用hadoop自带的wordcount示例进行测试,示例程序在/share/hadoop/mapreduce/目录下。程序为:
hadoop-mapreduce-examples-2.7.6.jar
命令为: hadoop jar hadoop-mapreduce-examples-2.7.6.jar wordcount input output
结果输出到output文件中。
(7)查看运行结果 cat output/*
1.4配置hadoop伪分布模式并运行wordcount示例
1.配置yarn-env.sh文件
文件路径为/usr/local/hadoop/hadoop-2.7.4/etc/hadoop/yarn-env.sh
进入文件vim yarn-env.sh
加入JAVA_HOMEexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
编译source yarn-env.sh
2.配置hadoop核心文件core-site.xml,主要配置HDFS的地址和端口号
在core-site.xml中加入
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/hadoop-2.7.6/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
3.配置hdfs-site.xml
在文件中加入:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hadoop-2.7.6/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoop-2.7.6/tmp/dfs/data</value>
</property>
</configuration>
4.配置mapred-site.xml
在文件中加入:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5.配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
6.启动Hadoop
(1)首先需要对namenode进行格式化 ./bin/hdfs namenode -format
(2)启动HDFS ./sbin/start-dfs.sh
问题一.此处出现了报错:
解决方案是:在hadoop-env.sh中添加
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.6
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
然后用source hadoop-env.sh编译
之后在/etc/profile文件中加入如下代码:
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.6
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
重启ubuntu系统,使配置内容生效。
问题二.之后重新运行hdfs,./sbin/start-dfs.sh
使用jps查看进程,发现没有namenode的启动信息,如下图所示:
解决方案:有网友说可能是端口冲突(core-site.xml配置文件中设置的内容),可以通过netstat -anp|grep 9000命令查看是否有应用占用该端口,这里不是这个问题
第二种方法,
stop-dfs.sh -> 停止
删除之前配置时创建的tmp目录
完了再新建tmp目录
hdfs namenode -format -> 重新格式化
start-dfs.sh -> 再次启动
问题解决:
(3)启动yarn ./sbin/start-yarn.sh
jps命令查看进程
可以再web中查看集群运行情况
http://localhost:50070
7.测试wordcount程序
使用命令在dfs下创建input文件夹 hdfs dfs -mkdir /input
运行程序 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input/ /output
如果需要反复运行程序,需要在运行之前删除output文件夹,命令为: hdfs dfs -rm -r /output
如果在运行的过程中报错“无法分配内存”
这是因为hdfs的默认内存为1000MB,需要重新设置hadoop-env.sh文件
# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE=2000