文章目录
一、项目总体要求
利用python编写爬虫程序,从招聘网站上爬取数据,将数据存入到MongoDB数据库中,将存入的数据作一定的数据清洗后做数据分析(spark),最后将分析的结果做数据可视化。
二、环境搭建
使用三台机器搭建完全分布式
1、安装包准备
- jdk-8u121-linux-x64.gz
- hadoop-2.5.0-cdh5.3.6.tar.gz
- zookeeper-3.4.14.tar.gz
- spark-2.4.4-bin-hadoop2.7.tgz
- apache-flume-1.6.0-bin.tar.gz
- kafka_2.12-2.5.0.tgz
- hive-0.13.1-cdh5.3.6.tar.gz
- sqoop-1.4.5-cdh5.3.6.tar.gz
- mysql-connector-java-5.1.47.jar
在/opt目录下创建software目录和module目录:mkdir 目录名
使用filezilla工具(没有的可以搜索下载,也可以使用其他上传工具)将安装包上传到第一台机器hadoop101的/opt/software/目录下
2、安装jdk
三台机器相同操作
(1)查询是否安装java
命令:rpm -qa|grep java
我是已经安装的1.8版本
(2)卸载jdk
如果版本低于1.7,卸载该jdk:rpm -e --nodeps 软件包名
,如果大于等于1.8可以直接使用
(3)安装jdk
将jdk解压到/opt/module目录下:
tar -zxvf jdk-8u121-linux-x64.gz -C /opt/module/
(4)配置jdk环境变量
- 获取jdk路径
- 编辑/etc/profile文件:
vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin
- 保存后退出:
:wq
- 使修改文件生效:
source /etc/profile
- 查看是否安装成功:
java -version
3、配置ssh免密登录
(1)进入到我的home目录
cd ~/.ssh
(2)生成公钥和私钥
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(3)将公钥拷贝到要免密登录的目标机器上
拷贝到第二台
ssh-copy-id hadoop102
拷贝到第三台
ssh-copy-id hadoop103
4、部署Zookeeper
(1)解压安装
tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/module/
(2)创建目录
在/opt/module/zookeeper-3.4.14/下创建data/zkData和data/zkLogData
mkdir -p data/zkData
mkdir -p data/zkLogData
(3)配置zoo.cfg文件
重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
具体配置:
# 数据存储目录
dataDir = /opt/module/zookeeper-3.4.14/data/zkData
# 日志信息存储目录
dataLogDir = /opt/module/zookeeper-3.4.14/data/zkLogData
# server.1 数字表示第几台,作为标识
# 2888端口是master和slave之间的通信端口
# 3888端口是leader选举的端口
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
(4)配置myid文件
在/opt/module/zookeeper-3.4.10/data/zkData目录下创建一个myid的文件
touch myid
编辑myid文件:vi myid
在文件中添加与server对应的编号:1
(5)拷贝zookeeper到另外两台机器
scp -r zookeeper-3.4.14/ root@hadoop2:/opt/module/
scp -r zookeeper-3.4.14/ root@hadoop3:/opt/module/
并分别修改myid文件中内容为2、3
(6)分别启动zookeeper
在每台机器的zookeeper-3.4.14目录下执行:bin/zkServer.sh start
启动成功后三台机器都应该有该进程
5、部署Hadoop
(1)解压安装
tar -zxvf hadoop-2.5.0-cdh5.3.6.tar.gz -C /opt/module/
配置文件在/opt/module/hadoop-2.5.0-cdh5.3.6/etc/hadoop目录下
(2)配置core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.5.0-cdh5.3.6/data/tmp</value>
</property>
<!--执行zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
</property>
</configuration>
(3)配置hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_121
(4)配置hdfs-site.xml
<configuration>
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
</configuration>
(5)配置slaves(配置哪几台机器有datanode)
hadoop101
hadoop102
hadoop103
(6)配置yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_121
(7)配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!-- 配置zookeeper的地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value>
<description>For multiple zk services, separate them with comma</description>
</property>
</configuration>
(8)配置mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_121
(9)配置mapred-site.xml
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务启动查看 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
</configuration>
(10)拷贝hadoop到另外两台机器
scp -r hadoop-2.5.0-cdh5.3.6/ root@hadoop2:/opt/module/
scp -r hadoop-2.5.0-cdh5.3.6/ root@hadoop3:/opt/module/
(11)启动集群
如果集群是第一次启动,需要格式化namenode
在第一台机器的hadoop-2.5.0-cdh5.3.6/目录下执行:bin/hdfs namenode -format
-
启动hdfs
在第一台机器的hadoop-2.5.0-cdh5.3.6/目录下执行:sbin/start-dfs.sh
-
启动yarn
在第一台机器的hadoop-2.5.0-cdh5.3.6/目录下执行:sbin/start-yarn.sh
第一台:
第二台:
第三台:
6、部署Flume
(1)解压安装
tar -zxvf apache-flume-1.6.0-bin.tar.gz -C /opt/module/
(2)配置
编辑flume-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_121
在conf目录下,创建一个配置文件agent.conf
(3)启动flume
根据指定的配置文件,来启动flume
进入flume的bin目录 执行:./flume-ng agent -n a1 -c ../conf -f ../conf/agent.conf Dflume.root.logger=INFO,console
安装nc:yum -y install nc
7、部署Spark
(1)解压安装
tar -zxvf spark-2.4.4-bin-hadoop2.7.tgz -C /opt/module/
(2)配置spark-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_121
export HADOOP_HOME=/opt/module/hadoop-2.5.0-cdh5.3.6
export SPARK_MASTER_IP=hadoop101
export HADOOP_CONF_DIR=/opt/module/hadoop-2.5.0-cdh5.3.6/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/opt/module/hadoop-2.5.0-cdh5.3.6/bin/hadoop classpath)
(3)配置slaves
(4)拷贝到另外两台
scp -r spark-2.4.4-bin-hadoop2.7/ root@hadoop2:/opt/module/
(5)启动测试
在sbin目录启动spark./start-all.sh
第一台:
第二台:
第三台:
8、部署Kafka
(1)解压安装
tar -zxvf kafka_2.12-2.5.0.tgz -C /opt/module/
(2)配置
在config目录下,修改server.properties,在文件中修改如下参数
broker.id=1
port=9092
listeners=PLAINTEXT://haoop101:9092
advertised.listeners=PLAINTEXT://hadoop101:9092
zookeeper.connect=hadoop101:2181,hadoop102:2181,hadoop103:2181
log.dirs=/opt/module/kafka_2.12-2.5.0/logData
创建对应的logData文件夹:mkdir logData
(3)启动
先启动Zookeeper在启动Kafka
- 启动Zookeeper
zkServer.sh start
- 启动Kafka
bin/kafka-server-start.sh config/server.properties
9、部署Hive
(1)解压安装
tar -zxf /opt/softwares/hive-0.13.1-cdh5.3.6.tar.gz -C /opt/module/
(2)重命名配置文件
mv hive-default.xml.template hive-site.xml
mv hive-env.sh.template hive-env.sh
(3)配置hive-env.sh
JAVA_HOME=/opt/modules/jdk1.8.0_121
HADOOP_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/
//hive启动加载的配置文件目录
export HIVE_CONF_DIR=/opt/modules/cdh/hive-0.13.1-cdh5.3.6/conf
(4)安装Mysql
yum -y install mysql mysql-server mysql-devel
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum -y install mysql-community-server
(5)配置Mysql
- 开启服务:
service mysqld start
- 设置root用户密码:
mysqladmin -u root password '1'
为其他节点机器授权(其他节点能访问该数据库):
- 进入MySQL:
mysql -u root -p
- 执行:
grant all on *.* to root@'hadoop101' identified by '1'; grant all on *.* to root@'hadoop102' identified by '1'; grant all on *.* to root@'hadoop103' identified by '1';
- 刷新权限:
flush privileges
(6)配置hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop101:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>1</value>
<description>password to use against metastore database</description>
</property>
<!-- 是否在当前客户端中显示查询出来的数据的字段名称 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
<!-- 是否在当前客户端中显示当前所在数据库名称 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
(7)配置hive-log4j.properties.template
hive.log.dir&#