1、Linux系统环境配置

1.1 配置IP地址

vim /etc/sysconfig/network-script/ifcfg-eth0
  • “DEVICE”:网卡对应的设备别名,如ifcfg-eth0第一块网卡;
  • “HWADDR”:网卡物理地址;
  • “BOOTPROTO”:网卡获得ip地址的方式,Static(静态 ip地址)dhcp(通过dhcp协议获取ip)bootip通过bootp协议获得的ip地址;
  • “IPADDR”:网卡IP地址;
  • “NETMASK”:网卡对应网络掩码;
  • “NETWORK”:网卡对应的网络地址;
  • “ONBOOT”:系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备。默认设置为yes;
  • “DNS”:配置该网络环境下的DNS。
    保存上述编辑内容,运行如下命令重启network服务。
service network restart

说明:集群中,其余机器IP地址配置方式同上。

1.2 配置DNS服务

DNS服务,目前只是在host文件中做了ip地址和主机名映射。

先在各节点配置主机名:

#永久性改变主机名,必须重启才能生效
hostnamectl --static set-hostname host1
#退出当前终端,再重新连接linux,使新的主机名生效
#如果重启未生效 参考

编辑各个节点的配置文件/etc/hosts如下:

vim /etc/hosts
192.268.111.111         host1
192.268.111.112         host2
192.268.111.113         host3
……

注意:ip改为为自己集群ip

1.3 关闭系统THP

关闭大页内存(THP)

vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag

保存退出,然后赋予rc.local文件执行权限

chmod +x /etc/rc.d/rc.local

1.4 修改系统Linux限制值

vi /etc/security/limits.conf
最后添加
* soft nofile 1024000
* hard nofile 1024000
hive   - nofile 1024000
hive   - nproc  1024000

用户进程限制

vi /etc/security/limits.d/20-nproc.conf
	#加大普通用户限制  也可以改为unlimited
	*          soft    nproc     40960
	root       soft    nproc     unlimited

1.5 同步时间

# 参考

2、部署前准备工作

2.1 设置SSH免密码登录

配置host1到其余各虚拟机的ssh免密码登录,使用如下命令生成ssh所需的公钥以及私钥。
运行如下脚本完成集群免密码登录。

vim sshScript.sh
#! /bin/bash
ssh-keygen -t rsa
ALL_CLIENTS=`cat /etc/hosts| grep "10.10.32" | awk '{print $2}'` 
CLIENTS=""
for client in $ALL_CLIENTS
do
echo "=============copy-ssh-id $client============="
ssh-copy-id $client
done

注意:
(1)运维人员需要根据实际环境将上述脚本中的IP地址“10.10.32”修改为实际环境中的IP地址网段;
(2)运行该脚本过程中需要运维人员与其交互;

chmod u+x sshScript.sh

2.2 关闭各节点防火墙

Hadoop集群的部署需要所有节点都将防火墙关闭,与此同时也要设置开机默认不启动防火墙,运行如下脚本来完成该操作

# CentOS7 则运行以下命令
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2.3 安装openssl服务

安装openssl服务,使用如下所示的脚本。

vim opensslInstall.sh
#! /bin/bash
ALL_CLIENTS=`cat /etc/hosts| grep "10.10.32" | awk '{print $2}'` 
CLIENTS=""
for client in $ALL_CLIENTS
do
echo "======yum openssl at $client ======="
ssh $client "yum -y install openssl"
done

为该脚本添加执行权限:

chmod u+x opensslInstall.sh

执行脚本:

sh opensslInstall.sh

2.4 安装httpd服务

在需要安装Amabri-Server的节点安装httpd服务,然后启动该服务并且将该服务设置为开机自启动,使用如下命令

yum -y install httpd && service httpd restart

2.5 安装JDK

注意:更换版本不成功,试一下删除下面两个目录
rm -rf /usr/bin/java
rm -rf /usr/bin/javac

2.6 关闭selinux

修改vim /etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled,重启机器。其余节点做一样处理。

3、安装MySQL

在安装Ambari-Server的节点上安装MySQL

3.1 建立用户及用户组

groupadd mysql
useradd -g mysql mysql

# 安装mysql步骤参考

3.2 创建Ambari用户

创建Ambari用户,使用如下命令。

mysql> CREATE USER ambari IDENTIFIED BY '123456';

4、配置本地源以及Ambari服务的安装

4.1 配置Ambari本地源

1)上传文件

# 将ambari-2.5.0.3-centos7.tar.gz 
# HDP-2.6.5.0-centos7-rpm.tar.gz
# HDP-UTILS-1.1.0.21-centos7.tar.gz
# 上传到安装ambari-server节点的 /var/www/html 路径下 并解压

2) 编辑ambari.repo 文件

vim /etc/yum.repos.d/ambari.repo
#VERSION_NUMBER=2.5.0.3-7
[ambari-2.5.0.3]
name=ambari Version - ambari-2.5.0.3
#baseurl=http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.5.0.3
baseurl=http://192.268.111.111/ambari/centos7/
gpgcheck=1
#gpgkey=http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.5.0.3/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
gpgkey=http://192.268.111.111/ambari/centos7/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

3) 编辑HDP.repo 文件

vim /etc/yum.repos.d/HDP.repo
[HDP-2.6]
name=HDP-2.6
baseurl=http://192.268.111.111/HDP/centos7/2.6.5.0-292
path=/
enabled=1
gpgcheck=0

4) 编辑HDP-UTILS.repo

vim /etc/yum.repos.d/HDP-UTILS.repo
[HDP-UTILS-1.1.0.21]
name=HDP-UTILS-1.1.0.21
baseurl=http://192.268.111.111/HDP-UTILS-1.1.0.21-centos7/

path=/
enabled=1
gpgcheck=0

注意 1、修改对应版本和ip(ip为安装ambari-server节点ip)

2、将上面的三个repo文件分发到其余所有服务器

4.2 安装Ambari Server

1)通过本地源安装Ambari Server

yum -y install ambari-server

cmd如何查看spark安装位置 如何查看spark版本_apache

注意:由于该环境中使用MySQL作为数据库,在设置Amabri-server服务之前需要做一下操作。

a. 在MySQL中创建ambari数据库,运行ambari数据库脚本
mysql> CREATE DATABASE `ambari`;
mysql> use ambari;
mysql> source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
b. 将mysql-connector-java-5.1.47.tar.gz拷贝至/usr/share/java路径下,并且做链接
cp mysql-connector-java-5.1.47.tar.gz /usr/share/java/
cd /usr/share/java
ln -s mysql-connector-java-5.1.47.tar.gz mysql-connector-java.jar

2) Ambari Server安装完成后,执行如下命令来完成Ambari设置。

ambari-server setup

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfKxIYHx-1588058022607)(C:\Users\zcah_lxl\Desktop\111.png)]

按图中所示步骤操作,ambari-server设置完成后会有“Ambari Server ‘setup’ completed successfully.”日志说明

3) 启动ambari服务

ambari-server start
# 出现以下表示服务启动成功
# Ambari Server 'start' completed successfully.

如果启动的时候报错,请查看/var/log/ambari-server/ambari-server.log:

tail -100 /var/log/ambari-server/ambari-server.log

找到具体错误,解决之后再启动ambari服务。很多出错是因为mysql的权限问题。

5、搭建HDP集群

5.1 在其他节点安装启动ambari-agent

yum install ambari-agent
# 不能安装的话 先yum clean all一下
# 修改ambari-agent.ini文件
# 修改hostname=host1 即ambari-server所在的节点主机名
15 [server]
16 hostname=host1
17 url_port=8440
18 secured_url_port=8441
# 启动
/etc/init.d/ambari-agent start
/etc/init.d/ambari-agent status

注:ambari-agent 启动失败查看日志错误:certificate verify failed

Failed to connect. Please check openssl library versions

在openssl版本一致的情况python-2.7.5可能会出现证书验证失败下禁用证书就可以了执行如命令:

sed -i 's/verify=platform_default/verify=disable/' /etc/python/cert-verification.cfg

5.2 搭建Ambari平台及安装Zookeeper

通过上述的准备工作,下面的操作都要转移到图形化界面进行。通过Ambari提供的图形化界面安装Hadoop集群。

1)登录ambari界面

通过本地浏览器访问Ambari服务所在服务器,访问链接为http://10.10.32.231:8080,该服务器将会返回如图3-49所示的登陆界面。

该服务登录用户名默认为:admin,密码为:admin。

2)创建新集群

登录Ambari服务之后,页面会跳转到如图3-49所示的界面,选择“Launch Install Wizard”来创建一个新的集群。

这个集群的搭建步骤如下:

- Get Started
	- Select Stack
	- Install Options
	- Confirm Hosts
	- Choose Services
	- Assign Masters
	- Assign Staves and Clients
	- Customize Services
	- Review
	- Install,Start and Test
	- Summary
  1. 需要定义一个集群名称,然后单击“Next”按钮。
  2. 该步骤需要选择HDP版本以及指定HDP组件下载链接。(选择版本见步骤4中HDP版本)
  3. 单击“Advanced Repository Options”链接,“OS”选择redhat7,“Base URL”分别编辑为
# http://{HDP本地源}/HDP/centos7/2.6.5.0-292/
# http://{HDP本地源}/HDP-UTILS-1.1.0.21-centos7/
# 可以先通过浏览器访问一下
  1. 单击“Next”按钮,系统会对上述URL进行校验,校验通过后会自动进入“Install Options”页面。
  2. 该步骤需要编辑的内容有主机名列表以及勾选手动注册。

遇到问题
注册失败问题
发现是我在/etc/profile中配置了代理的原因
删除配置解决问题

  1. 选择安装的服务
    Choose Services页面提供了几乎所有大数据需要用到的组件,组件之间需要依赖的会有提示,多组件一起安装容易出现问题,建议分开安装,这里只安装zookeeper
  2. 选择指定Zookeeper Client主机完成后,单击“Next”按钮,页面跳转至Customize Services界面,可以通过Customize Services界面对Zookeeper配置文件进行编辑,一般的,没有特殊需求,该步骤保持系统默认配置。
  3. 单击“Next”按钮,页面跳转至Review界面,该界面主要展示Zookeeper组件的基本信息,让系统管理员确认Zookeeper安装信息是否正确。确认该安装信息正确无误单击“Deploy”按钮开始部署Zookeeper集群
  4. Zookeeper集群自动安装部署过程较慢,该过程无需系统管理员介入,如果由于配置错误导致Zookeeper集群部署失败,需要查看系统部署日志、排错并进行再次安装。该步骤包括“Install”、“Start”以及“Test”操作。系统会在安装Zookeeper结束后启动并且测试该服务的运行情况。
    注意:如果出现和mysql冲突的错误找对应的mysql版本的devel安装后,重新安装。
  5. 如果页面显示全部启动正常,直接“Next” 安装成功

6、遇到主要问题

6.1. 安装hive时测试连接mysql连接不上

安装hive是需要配置 hive database 选择Existing Mysql / MariaDB Database

所以事先在mysql中创建好hive database 和 用户,并授权

注意:在Database URL 中他给出的默认URL需要改正

a.hostname改为mysql所在的服务器hostname

b.在参数中添加 CreateDatabaseNotExist=true(默认没有这个参数,测试连接不成功)

6.2. 更换spark2版本

因为要使用的carbondata对spark版本有要求,项目中使用的carbondata版本为1.6.1,spark版本要求为2.2.1

上面安装的HDP中默认的spark版本为 2.3.0.2.6.5.0-292所以需要更换

更换方法,

1)、找到SPARK2-HOME下的jars路径 并改名,重现创建一个jars空目录

2)、然后下载spark2.2.1的tar包,把所有依赖的jar包拷贝到上面创建的jars路径下

6.3. spark启动不成功问题 提交任务之后在yarn上查看日志报错

……:bad substitution

在MapReduce2的config/Custom mapred-site中添加

hdp.version=2.6.5.0-292
# 版本为HDP版本

6.4. spark集成carbondata

1)、先下载carbondata

https://github.com/apache/carbondata

2)、构建命令

mvn -DskipTests -Pspark-2.2 -Dspark.version=2.2.1 clean package

3)、如果构建过程中没有遇到错误,carbondata目录下会生成./assembly/target/scala-2.1x/carbondata_xxx.ja的jar包。把jar包放到$SPARK_HOME/carbonlib/下

注意:carbonlib需要手动在$SPARK_HOME下创建

4)、创建carbonlib/文件夹的tar.gz文件,并将其移入carbonlib文件夹内

cd $SPARK_HOME
tar -zcvf carbondata.tar.gz carbonlib/
mv carbondata.tar.gz carbonlib/

5)、将./conf/carbon.properties.template文件从CarbonData存储库复制到文件SPARK_HOME/conf/夹,并将文件重命名为carbon.properties。

添加以下配置

carbon.storelocation=hdfs://192.168.111.111:8020/carbon/spark2.2.2/carbon.store
carbon.lock.type=HDFSLOCK
carbon.lock.path=hdfs://192.168.111.111:8020/carbon/lock
carbon.graph.rowset.size=100000
carbon.major.compaction.size=921600
enable.query.statistics=true

6)、在spark2 的Custom spark2-defaults中添加以下配置

spark.driver.extraClassPath=/usr/hdp/2.6.5.0-292/spark2/carbonlib/*
     
spark.driver.extraJavaOptions=-Dcarbon.properties.filepath=/usr/hdp/2.6.5.0-292/spark2/conf/carbon.properties
     
spark.executor.extraClassPath=carbondata.tar.gz/carbonlib/*
     
spark.executor.extraJavaOptions=-Dcarbon.properties.filepath=carbon.properties
     
spark.yarn.dist.archives=/usr/hdp/2.6.5.0-292/spark2/carbonlib/carbondata.tar.gz
     
spark.yarn.dist.files=/usr/hdp/2.6.5.0-292/spark2/conf/carbon.properties

7)、提交spark任务

spark-submit \
	--master yarn \
	--deploy-mode client  \
	--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer  \
	--num-executors 20 \
	--driver-memory 64G \
	--executor-memory 16G \
	--executor-cores 4 \
	--queue s1 \
    --conf spark.yarn.executor.memoryOverhead=4G \
	$SPARK_HOME/carbonlib/apache-carbondata-1.6.1-bin-spark2.2.1-hadoop2.7.2.jar \
	hdfs://host1:8020/carbon/spark2.2.1/carbon.store

8)、使用Beeline连接到CarbonData Thrift服务器。

beeline -u  jdbc:hive2://host1:10000  -n root

9)、建表测试

create table test(id int) stored as carbondata;
# 在NameNode UI中查看 提交spark任务时的hdfs路径
# hdfs://host1:8020/carbon/spark2.2.1/carbon.store下有test
# 代表创建成功