搭建Hadoop和Spark分布式集群

安装 Centos7

下载:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.7f54f5ad3YZhMm

配置内存:

  • 4 核

  • 8G

  • 200G 磁盘容量

配置账号密码:

  • 账号:zhangdapeng

  • 密码:zhangdapeng520

配置 VMWare:

  • 子网 IP:192.168.1.1

  • 网关 IP:192.168.1.2

配置固定 IP:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# 修改
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="3c26b62d-6bfe-43cf-9303-53a56dd1d3e1"
DEVICE="ens33"
ONBOOT="yes"
# 以下是新增
IPADDR=192.168.1.81
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
DNS1=192.168.1.2
NM_CONTROLLED="yes"

安装 JDK8

解压:

tar -xzvf jdkxxx.tar.gz -C ~/vmsoft/

配置环境变量:

vim /etc/profile

export JAVA_HOME=JDK 安装目录
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/

安装 Python3.7

安装依赖:

yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

下载 python3.7 并解压:

tar -xzvf python3.7.tgz -C ~/vmsoft/

编译并安装:

cd ~/vmsoft/python3.7
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl
make && make install

创建软链接:

ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

配置环境变量:

vim /etc/profile

# 添加
export PYTHON_HOME=/usr/local/python3
export PATH=$PYTHON_HOME/bin:$PATH

# 激活
source /etc/profile

安装 anaconda

下载:https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh

上传到 hadoop01

安装依赖:

yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver

安装 anaconda:

chmod +x Anaconda3-5.3.1-Linux-x86_64.sh
./Anaconda3-5.3.1-Linux-x86_64.sh

# 安装路径选择:/root/vmsoft/anaconda3

修改环境变量:

vim /etc/profile

# 修改
export PYTHON_HOME=/root/vmsoft/anaconda3/
export PATH=$PYTHON_HOME/bin:$PATH

# 激活
source /etc/profile

安装 Hadoop2.7.7

配置用户名

uname -n
vim /etc/hostname

# 改为
hadoop01

配置 hosts

vim /etc/hosts

# 添加
192.168.1.81 hadoop01
192.168.1.82 hadoop02
192.168.1.83 hadoop03

配置 ssh 免密登录

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh hadoop01

安装伪分布式 hadoop

下载:

上传并解压:

tar -xzvf hadoop2.7.tar.gz -C ~/vmsoft/

配置环境变量:

vim /etc/profile

# 添加
export HADOOP_HOME=/root/vmsoft/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 激活
source /etc/profile

配置 Hadoop

目录位置:$HADOOP_HOME/etc/hadoop

core_site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/data/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-service</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop001</value>
</property>
</configuration>

修改 slaves 文件,将默认的 localhost 改为 hadoop01。

修改 yarn-env.sh,在开头添加:

export JAVA_HOME=/root/vmsoft/jdk1.8.0_251

格式化 HDFS:

hdfs namenode -format

启动 Hadoop:

cd $HADOOP_HOME/sbin
./start-all.sh

# 停止
./stop-all.sh

# 查看进程
jps

访问:http://192.168.1.81:50070/dfshealth.html#tab-overview

HDFS 基础操作

# 创建文件夹
hdfs dfs -mkdir -p /mydata/txt
echo "hello" > ~/vmtools/demo.txt

# 上传文件
hdfs dfs -put ~/vmtools/demo.txt /mydata/txt/

# 查看目录
hdfs dfs -ls /mydata/txt

# 删除
hdfs dfs -rm /mydata/txt/yarn-root-nodemanager-hadoop01.out

# 下载
hdfs dfs -get /mydata/txt

Hadoop 完全分布式安装

在 VMWare 中,完整克隆 hadoop01 为 hadoop02,hadoop03。

在/etc/sysconfig/network-scripts/ifcfg-ens33 中分别修改 hadoop02 和 hadoop03 的 IP:

  • 192.168.1.82

  • 192.168.1.83

分别设置 hadoop02 和 hadoop03 的 hostname:

hostnamectl set-hostname hadoop02
hostnamectl set-hostname hadoop03

分别修改 hadoop01,hadoop02,hadoop03 的副本数为 3:

cd $HADOOP_HOME/etc/hadoop
vim hdfs-site.xml

# 修改如下内容
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

在 hadoop01,hadoop02,hadoop03 上重新格式化 HDFS:

cd /data/hadoop
rm -rf *
hdfs namenode -format

测试 hadoop01 免密登录 hadoop02 和 hadoop03:

ping hadoop02
ping hadoop03
ssh hadoop02
ssh hadoop03

启动 Hadoop:

cd $HADOOP_HOME/sbin
./stop-all.sh
./start-all.sh

ssh hadoop02
cd $HADOOP_HOME/sbin
./stop-all.sh
./start-all.sh

ssh hadoop03
cd $HADOOP_HOME/sbin
./stop-all.sh
./start-all.sh

访问:http://192.168.1.81:50070/

安装 Spark2.4.5

下载:https://archive.apache.org/dist/spark/spark-2.4.5/

解压:

tar -xzvf spark2.4.5.tgz -C ~/vmsoft/

配置环境变量:

vim /etc/profile

# 添加
export SPARK_HOME=/root/vmsoft/spark-2.4.5-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

# 激活
source /etc/profile

修改日志配置:

cd $SPARK_HOME/conf
mv log4j.properties.template log4j.properties

# 修改
log4j.rootCategory=INFO, console

# 改为
log4j.rootCategory=ERROR, console

修改 Python 配置:

cd $SPARK_HOME/conf
mv spark-env.sh.template spark-env.sh

# 添加
PYSPARK_PYTHON=/root/vmsoft/anaconda3/bin/python
export JAVA_HOME=/root/vmsoft/jdk1.8.0_251
export HADOOP_HOME=/root/vmsoft/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_IP=hadoop01
SPARK_LOCAL_DIRS=/root/vmsoft/spark-2.4.5-bin-hadoop2.7

安装 Hive3.1.2

下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/

将下载的文件上传到 hadoop01,然后解压:

tar -xzvf apache-hive-3.1.2-bin.tar.gz -C ~/vmsoft/

配置环境变量:

vim /etc/profile

# 添加
export HIVE_HOME=/root/vmsoft/apache-hive-3.1.2-bin
export PATH=$HIVE_HOME/bin:$PATH

# 激活
source /etc/profile

由于 hive 的运行需要元数据库的支持,所以还需要继续安装 PostgreSQL。

安装 PostgreSQL11

下载:https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/

将文件 pgdg-redhat-repo-latest.noarch.rpm 上传,然后安装:

yum install pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql11 -y
yum install postgresql11-server -y

初始化数据库:

/usr/pgsql-11/bin/postgresql-11-setup initdb

启动数据库:

systemctl enable postgresql-11
systemctl start postgresql-11

启用远程访问:

vim /var/lib/pgsql/11/data/postgresql.conf

# 修改
listen_address="*"

修改密码访问方式为 md5:

vim /var/lib/pgsql/11/data/pg_hba.conf

# 修改
host all all 127.0.0.1/32 md5
local all all trust
host all all 0.0.0.0/0 trust

搭建 Hadoop 和 Spark 分布式集群

重启数据库:

systemctl restart postgresql-11

设置管理员用户的密码:

su - postgres
psql
create user root with password 'root';
create database hive_db_meta owner root;
GRANT ALL ON DATABASE hive_db_meta TO root;
q
logout

安装 JDBC 驱动

Hive 的运行需要 JDBC 的驱动,需要安装。

下载:https://jdbc.postgresql.org/download/

上传到$HIVE_HOME/lib

由于 Hive 存储也是依赖于 hadoop,所以需要 hadoop 上创建 hive 对应的目录:

hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -chmod -R 777 /user/hive/tmp

复制默认的配置文件:

cd $HIVE_HOME/conf
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml

修改配置:

vim hive-env.sh

# 添加如下内容
export JAVA_HOME=/root/vmsoft/jdk1.8.0_251
export HADOOP_HOME=/root/vmsoft/hadoop-2.7.7
export HIVE_HOME=/root/vmsoft/apache-hive-3.1.2-bin
export HIVE_CONF_DIR=/root/vmsoft/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/root/vmsoft/apache-hive-3.1.2-bin/lib

修改 hive-site.xml:

mv hive-site.xml hive-site.xml.back
vim hive-site.xml

添加如下内容:

<configuration>
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:postgresql://localhost:5432/hive_db_meta?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.postgresql.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.druid.metadata.db.type</name>
<value>postgresql</value>
<description>
Expects one of the pattern in [mysql, postgresql, derby].
Type of the metadata database.
</description>
</property>
</configuration>

初始化元数据库:

schematool -dbType postgres -initSchema -verbose

启动 hive:

hive

# 退出
exit;

上传 hive 示例文件:

cd $HIVE_HOME/examples/files
hdfs dfs -mkdir -p /mydata
hdfs dfs -put 3col_data.txt /mydata/
hdfs dfs -ls /mydata
hdfs dfs -cat /mydata/3col_data.txt

使用 hive 创建表,字段用空格分割,行用“n”分割:

hive

# 创建表
CREATE TABLE IF NOT EXISTS `demo01` (`id` int,`name` string,`amount` double) row format delimited fields terminated by ' ';

# 创建语句,仅供参考,要用上面在一行的语句
CREATE TABLE IF NOT EXISTS `demo01` (
`id` int,`name` string,`amount` double)
row format delimited fields terminated by ' ';

# 从 hdfs 加载数据
# 注意:这种方式加载会将 hdfs 中的文件移动到 hive 中
LOAD DATA INPATH '/mydata/3col_data.txt' OVERWRITE INTO TABLE demo01;

# 查询数据
select * from demo01;

从本地文件加载数据:

CREATE TABLE IF NOT EXISTS kv1 (key INT, value STRING);
LOAD DATA LOCAL INPATH '/root/vmsoft/apache-hive-3.1.2-bin/examples/files/kv1.txt' INTO TABLE kv1;
select * from kv1;
select count(*) from kv1;

Hive 与 Spark 集成

复制配置文件:

cd $HIVE_HOME/conf
cp hive-site.xml $SPARK_HOME/conf/
ls $SPARK_HOME/conf/

分发到其他电脑上:

scp -rq $HIVE_HOME/conf/hive-site.xml hadoop02:/root/vmsoft/spark-2.4.5-bin-hadoop2.7/conf/
scp -rq $HIVE_HOME/conf/hive-site.xml hadoop03:/root/vmsoft/spark-2.4.5-bin-hadoop2.7/conf/

cp $HIVE_HOME/lib/HikariCP-2.6.1.jar $SPARK_HOME/jars/
scp -rq $HIVE_HOME/lib/HikariCP-2.6.1.jar hadoop02:/root/vmsoft/spark-2.4.5-bin-hadoop2.7/jars/
scp -rq $HIVE_HOME/lib/HikariCP-2.6.1.jar hadoop03:/root/vmsoft/spark-2.4.5-bin-hadoop2.7/jars/

cp $HIVE_HOME/lib/postgresql-42.5.1.jar $SPARK_HOME/jars/
scp -rq $HIVE_HOME/lib/postgresql-42.5.1.jar hadoop02:/root/vmsoft/spark-2.4.5-bin-hadoop2.7/jars/
scp -rq $HIVE_HOME/lib/postgresql-42.5.1.jar hadoop03:/root/vmsoft/spark-2.4.5-bin-hadoop2.7/jars/

修改配置:

vim $HADOOP_HOME/etc/hadoop/core-site.xml

添加如下配置:

<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

重启 Hadoop:

cd $HADOOP_HOME/sbin
./stop-all.sh
./start-all.sh

启动 Hive 相关服务:

cd ~
nohup hive --service metastore >> log.out 2>&1 &
nohup hive --service hiveserver2 >> log.out 2>&1 &

查看 hive 服务:

jps -ml | grep Hive

查看 10000 端口是否启动:

lsof -i:10000

继续修改 hive 的配置:

cd $HIVE_HOME/conf
vim hive-site.xml

添加内容如下:

<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.connectionPollingType</name>
<value>dbcp</value>
<description>connection pool type</description>
</property>

使用 spark-sql:

spark-sql
show databases;
use default;
show tables;
select count(*) from kv1;

打造交互式 Spark 环境

pysaprk 的基本使用

echo "hello world" >> /root/vmtools/demo.txt
pyspark

file = sc.textFile("file:///root/vmtools/demo.txt")
file.count()
exit()

配置 pypi 镜像

mkdir ~/.pip
vim ~/.pip/pip.conf

# 添加如下内容
[global]
index-url=http://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com

安装 jupyter

pip install jupyter

配置 spark

pip install findspark
pip install pysqlite3
find / -name jupyter

安装插件

pip install jupyter_nbextensions_configurator
jupyter nbextentions_configurator enable -user

配置远程访问

获取密码:

ipython
from notebook.auth import passwd
passwd()
# sha1:57603a632fbe:0ffcdabdf45760b7947c008a6f591bf873f2a191
exit()

复制密码,接着配置:

jupyter notebook --generate-config
vim /root/.jupyter/jupyter_notebook_config.py

加入如下内容:

c.NotebookApp.ip="*"
#c.NotebookApp.password=u"sha1:刚才复制的密码"
c.NotebookApp.password=u"sha1:57603a632fbe:0ffcdabdf45760b7947c008a6f591bf873f2a191"
c.NotebookApp.open_browser=False
c.NotebookApp.port=8888

启动 jupyter

jupyter notebook --allow-root

宿主机浏览器访问:http://192.168.1.81:8888

入门案例

创建一个 Python3 文件,编写测试代码并执行:

import findspark
findspark.init()

import pyspark
import random

sc = pyspark.SparkContext(appName="Pi")
num_samples = 100000000

def inside(p):
x, y = random.random(), random.random()
return x * x + y * y < 1

count = sc.parallelize(range(0, num_samples)).filter(inside).count()

pi = 4 * count / num_samples
print(pi)

sc.stop()

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...