安装 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
重启数据库:
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()