spark-2.2.0-bin-2.6.1-cdh5.7.1 编译部署(二)

环境相关:

OS:CentOS release 6.9
IP:192.168.77.10
MEM:10G(推荐4G以上)
DISK:50G

1. 相关说明

  • 参见《hadoop2.6.0-cdh5.7.1伪分布式编译安装》第1到第3部分,生成编译包
  • 参见《hive-1.1.0-cdh5.7.1编译安装部署》第1到第2部分,生成编译包

2. 主机克隆,基础环境部署

参照《CentOS6实验机模板搭建部署》
克隆一台实验机作为spark部署主机
建议对linux不熟悉的萌新将编译主机和部署主机分开
将linux环境相关的问题减小到最低
调整内存为10G,并进一步配置主机名和hosts文件:

hostname hadoop001
# 如果你不想使用hadoop001作为你的主机名,则需要在此处更改掉
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
echo "$(ifconfig eth0|grep inet|awk -F'[ :]' '{print $13}') $(hostname)">>/etc/hosts
sed -i "s/^HOSTNAME.*$/HOSTNAME=$(hostname)/g" /etc/sysconfig/network
ping -c 3 $(hostname)

3. hadoop伪分布式集群部署:

配置 jdk1.8+:
我们在编译hadoop和hive时用的是jdk1.7,
此处使用jdk1.8编译部署spark对在jdk1.7下编译的hadoop和hive没有影响,
即使用jdk1.7编译的hadoop和hive可以部署运行在jdk1.8之上

mkdir /usr/java
cd /usr/java/
tar -xf /tmp/jdk-8u152-linux-x64.tar.gz
chown root: /usr/java/jdk1.8.0_152/ -R
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_152'>>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile
source /etc/profile

添加hadoop用户,作为hadoop和hive以及spark的用户,配置sudo权限:

useradd hadoop
echo hadoop|passwd --stdin hadoop
sed -i 's/^root.*/&\nhadoop  ALL=(ALL)       ALL/g' /etc/sudoers

安装编译生成的hadoop包:

cd /usr/local
tar -xf /tmp/hadoop-2.6.0-cdh5.7.1.tar.gz
chown hadoop: hadoop-2.6.0-cdh5.7.1 -R
ln -s hadoop-2.6.0-cdh5.7.1/ hadoop
cd hadoop
echo 'export HADOOP_HOME=/usr/local/hadoop'>>/etc/profile
echo 'export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH'>>/etc/profile
source /etc/profile

切换到hadoop用户,配置ssh互信:

su - hadoop
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
ssh -o StrictHostKeyChecking=no localhost date
ssh -o StrictHostKeyChecking=no 127.0.0.1 date
ssh -o StrictHostKeyChecking=no $(hostname) date

配置HDFS:

cd /usr/local/hadoop
vi etc/hadoop/core-site.xml
# 在<configuration>这里添加配置</configuration>
# 添加完配置之后如下:
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>

vi etc/hadoop/hdfs-site.xml
# 在<configuration>这里添加配置</configuration>
# 添加完配置之后如下:
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop001:50090</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.https-address</name>
        <value>hadoop001:50091</value>
    </property>
</configuration>

cd /usr/local/hadoop/etc/hadoop
echo $(hostname)>slaves
# 修改hadoop的slave的解析地址

格式化namenode,启动HDFS:

cd /usr/local/hadoop/sbin/
sed -i "s#^usage#HADOOP_PID_DIR=$HADOOP_HOME/run\n&#g" hadoop-daemon.sh
# 修改PID文件的位置,从/tmp/移到$HADOOP_HOME/run之下
cd /usr/local/hadoop/etc/hadoop/
sed -i "s#export JAVA_HOME=.*#export JAVA_HOME=$JAVA_HOME#g" hadoop-env.sh
hdfs namenode -format
# 一般一个节点只能格式化一次,重新格式化会擦掉原来的hdfs上的数据
# 重新格式化需要清掉 /usr/local/hadoop/tmp 目录下的所有文件
start-dfs.sh

进程状态查看:

jps
# 查看NameNode、SecondaryNameNode和DataNode是否启动
# 网页访问:
# http://192.168.1.10:50070

MR配置部署:

cd /usr/local/hadoop/etc/hadoop
cp -av mapred-site.xml{.template,}
vi mapred-site.xml
# 在<configuration>这里添加配置</configuration>
# 添加完配置之后如下:
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

YARN配置部署:

vi yarn-site.xml
# 在<configuration>这里添加配置</configuration>
# 添加完配置之后如下:
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

启动:

cd /usr/local/hadoop/sbin/
sed -i "s#^usage#YARN_PID_DIR=$HADOOP_HOME/run\n&#g" yarn-daemon.sh
# 修改PID文件的位置,从/tmp/移到$HADOOP_HOME/run之下
start-yarn.sh
# 启动yarn
# 访问http://192.168.77.10:8088

测试和设置开机启动:

cd /usr/local/hadoop/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.1.jar pi 5 10
# http://192.168.1.10:8088/cluster/apps
# 网页查看

su - root
echo "/bin/su - hadoop -c '/usr/local/hadoop/sbin/start-all.sh'">>/etc/rc.local
# 使用root权限设置,可重启Linux进行测试。

4. hive环境部署:

MySQL安装并设置开机启动:
hive需要一个库,否则hive就会默认使用Derby库,同一时间只能创建一个hive会话,
MySQL库不能够使用Centos官方自带的版本,因为版本较低,有BUG,
配置高版本的MySQL仓库地址,使用yum安装:

cat >/etc/yum.repos.d/MySQL5.6.repo<<EOF
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/\$basearch/
enabled=1
gpgcheck=0
EOF
yum -y install mysql-community-server

该仓库的网络传输较慢,可以设置yum的/etc/yum.conf中的keepcache=1,
将一次安装之后下载到的rpm包保存下来,下次安装直接使用本地的rpm包进行:

yum -y localinstall \
mysql-community-common-5.6.39-2.el6.x86_64.rpm \
mysql-community-client-5.6.39-2.el6.x86_64.rpm \
mysql-community-libs-compat-5.6.39-2.el6.x86_64.rpm \
mysql-community-libs-5.6.39-2.el6.x86_64.rpm \
mysql-community-server-5.6.39-2.el6.x86_64.rpm

启动并设置MySQL开机启动:

chkconfig mysqld on
/etc/init.d/mysqld start

配置MySQL的root密码权限:

mysqladmin -u root password vincent
mysql -uroot -pvincent
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'vincent' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'vincent' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'vincent' WITH GRANT OPTION;
update user set password=password('vincent') where user='root';
delete from user where not (user='root') ;
delete from user where user='root' and password=''; 
drop database test;
DROP USER ''@'%';
flush privileges;
exit;

解压编译出来的hive安装包,配置环境变量:

cd /usr/local/
tar -xf /tmp/apache-hive-1.1.0-cdh5.7.1-bin.tar.gz
ln -s apache-hive-1.1.0-cdh5.7.1-bin hive
chown hadoop: apache-hive-1.1.0-cdh5.7.1-bin -R
chown hadoop: hive -R
echo 'export HIVE_HOME=/usr/local/hive'>>/etc/profile
echo 'export PATH=$HIVE_HOME/bin:$PATH'>>/etc/profile

配置mysql连接文件:

su - hadoop
cd /usr/local/hive
cd conf
cp -av hive-env.sh{.template,}
echo 'HADOOP_HOME=/usr/local/hadoop'>>hive-env.sh
vi hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> 
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop001:3306/vincent_hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>vincent</value>
    </property>
</configuration>
# 配置文件中使用主机名hadoop001
# 因此要保证/etc/hosts文件中有正确的解析
# 配置文件hive-site.xml使用了java的mysql驱动包
# 而编译的hive安装包中没有该驱动包
# 需要手动上传
cd /tmp
unzip mysql-connector-java-5.1.45.zip
cd mysql-connector-java-5.1.45
cp mysql-connector-java-5.1.45-bin.jar /usr/local/hive/lib/

配置hive的日志位置:

cd /usr/local/hive/conf/
cp -av hive-log4j.properties{.template,}
sed -i 's#^hive.log.dir=.*#hive.log.dir=/usr/local/hive/log#g' hive-log4j.properties

简单测试:

hive
show databases;
exit;
# 能够正常进入命令行不报错
# 能够查看到defalut库
# 代表配置成功
echo show databases|mysql -uroot -pvincent
# 发现库自动创建,表示配置无误

5. spark部署:

scala2.11.8 部署:

cd /usr/local/
tar -xf /tmp/scala-2.11.8.tgz
chown hadoop: /usr/local/scala-2.11.8 -R
echo 'export SCALA_HOME=/usr/local/scala-2.11.8'>>/etc/profile
echo 'export PATH=$SCALA_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
scala -version
# spark源码编译的时候scala属于root用户
# 此时scala属于hadoop用户

spark 解压部署:

cd /usr/local/
tar -xf /tmp/spark-2.2.0-bin-2.6.1-cdh5.7.1.tgz
ln -s spark-2.2.0-bin-2.6.1-cdh5.7.1 spark
chown hadoop: /usr/local/spark-2.2.0-bin-2.6.1-cdh5.7.1 -R
chown hadoop: /usr/local/spark -R
echo 'export SPARK_HOME=/usr/local/spark'>>/etc/profile
echo 'export PATH=$SPARK_HOME/bin:$PATH'>>/etc/profile
source /etc/profile

spark 配置:

su - hadoop
# 首先启动hadoop
start-all.sh

cd /usr/local/spark/conf
cp -av spark-env.sh{.template,}
cat >>spark-env.sh<<EOF
export JAVA_HOME=/usr/java/jdk1.8.0_152
# 使用jdk1.8
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
# 有该行参数配置,spark-shell 才能连接到yarn
export HIVE_HOME=/usr/local/hive
export SQOOP_HOME=/usr/local/sqoop
export SCALA_HOME=/usr/local/scala
export SPARK_HOME=/usr/local/spark
####### 以下是standalone模式参数,可以不加
export SPARK_MASTER_IP=hadoop001
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_LOCAL_IP="127.0.0.1"
export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
####### 以上是standalone模式参数,可以不加
EOF

cp -av /usr/local/hive/conf/hive-site.xml /usr/local/spark/conf/
cp -av /usr/local/hive/lib/mysql-connector-java-5.1.45-bin.jar /usr/local/spark/jars/
# 需要复制对应的hive-site.xml配置文件到spark
# 同时复制mysql的驱动jar包到spark的对应目录
# 如果不配置mysql相关的连接和驱动,则使用Derby库,单session模式

6. spark-shell测试:

spark-shell 有local模式、yarn模式以及standalone等其他模式,
一般使用local模式进行开发,然后yarn模式生产使用,
其他模式使用场景不多,不做测试,
local模式:

spark-shell --master local[2]
# local[2] 指定两个cores
# 查看日志输出:Spark context Web UI available at http://127.0.0.1:4040
# 可以通过浏览器访问这台主机的4040端口进入Web UI
# spark-shell 会自动创建一个SparkContext,叫sc

spark-shell --master local[2] --jars XXX.jar,xxx.jar
# 传入jar包启动spark-shell

spark-shell --master local[2] --packages "G1:A1:V1","G2:A2:V2"
# 当能够上公网或者有自建nexus时
# 可以使用GAV定位一个package的方式传入多个包
# 但一般生产环境不能上公网,自建私服应用于生产的情况也不多
# 因此,该方法使用的范围较小

yarn模式(即spark on yarn):

spark-shell --master yarn
# 因为该环境有hadoop伪分布式集群的环境,已经正常启动
# 且我们在spark-env.sh中配置了HADOOP_CONF_DIR
# 因此yarn模式只需要加一个yarn关键字即可

7. standalone 模式(仅做记录):

该模式需要启动spark集群守护进程,且使用场景不多,仅做简单记录,

cd /usr/local/spark/sbin
sed -i "s#^usage#SPARK_PID_DIR=$SPARK_HOME/run\n&#g" spark-daemon.sh
# 设置PID目录位置
# 日志位置在/usr/local/spark/logs之下,不用修改

# 启动hadoop

cd /usr/local/spark/conf
hostname>slaves
# 在slaves文件中写入主机名
# 即将本机作为slave,伪集群

cd /usr/local/spark/sbin
./start-all.sh
# 启动spark standalone模式

jps
# 可以看到Master和Worker进程
# http://192.168.77.10:8080/
# 可以访问对应URL
spark-shell --master spark://hadoop001:7077
# 启动standalone模式之后,连接该URL

[TOC]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值