作者:京东物流 秦彪 工欲善其事必先利其器,在深入学习大数据相关技术之前,先手动从0到1搭建一个属于自己的本地Hadoop和Spark运行环境,对于继续研究大数据生态圈各类技术具有重要意义。本文旨在站在研发的角度上通过手动实践搭建运行环境,文中不拖泥带水过多讲述基础知识,结合Hadoop和Spark最新版本,帮助大家跟着步骤一步步实践环境搭建。 1. 总体运行环境概览 (1) 软件包及使用工具版本介绍表: 技术名称或工具名称 版本 备注 Hadoop hadoop-3.3.4.tar.gz VirtualBox 6.0.0 r127566 虚拟机,推荐 CentOS centos7.3 JDK jdk-8u212-linux-x64.tar.gz 1.8.0_111 Zookeeper zookeeper-3.6.tar.gz FileZilla FileZilla_3.34.0 文件传输工具,推荐 MobaXterm MobaXterm_Portable_v10.9 SSH连接工具,推荐 Idea IDEA COMMUNITY 2019.1.4 代码IDE开发工具,推荐 (2)环境部署与分布介绍表: 主机名 IP 运行的进程 master 192.168.0.20 QuorumPeerMain、NameNode、DataNode、ResourceManager、NodeManager、JournalNode、DFSZKFailoverController、Master slave1 192.168.0.21 QuorumPeerMain、NameNode、DataNode、ResourceManager、NodeManager、JournalNode、DFSZKFailoverController、Master、Worker slave2 192.168.0.22 QuorumPeerMain、NameNode、DataNode、JournalNode、 NodeManager、Worker (3)进程介绍:(1表示进程存在,0表示不存在) 进程名 含义 master slave1 slave2 QuorumPeerMain ZK进程 1
1
1
NameNode Hadoop主节点 1
1
0
DataNode Hadoop数据节点 1
1
1
ResourceManager Yarn管理进程 1
1
0
NodeManager Yarn 工作进程 1
1
1
JournalNode NameNode同步进程 1
1
1
DFSZKFailoverController NameNode监控进程 1
1
0
Master Spark主节点 1
1
0
Worker Spark工作节点 1
1
1
2. 系统基础环境准备 步骤1: 虚拟机中Linux系统安装(略) VirtualBox中安装CentOS7操作系统 步骤2: CentOS7基础配置 (1) 配置主机的hostname 命令: vim/etc/hostname (2) 配置hosts, 命令vim /etc/hosts (3) 安装JDK 命令: rpm -qa | grep java 查看是否有通过rpm方式安装的java java -version 查看当前环境变量下的java 版本 1) filezilla上传安装包,tar -zxvf jdk-8u212-linux-x64.tar.gz 解压 2) bin目录的完整路径: /usr/local/jdk/jdk1.8.0_212/bin 3) vim /etc/profile 配置jdk环境变量 (4) 复制主机: 1)利用VirtualBox复制功能复制两台主机 2)命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0,设置相应的网络信息 3)三台主机IP分别为: 192.168.0.20/21/22 (5) 配置三台主机ssh无密码登录(略) (6) 安装zookeeper 1) filezilla上传安装包,zookeeper-3.4.10.tar.gz 解压 2) bin目录的完整路径: /usr/local/zookeeper/zookeeper-3.4.10/bin 3) vim /etc/profile 配置jdk环境变量 4) zookeeper的配置文件修改,zookeeper-3.4.10/conf/ 5) 执行命令从master节点复制配置到其他两个节点 6) 每台机器zookeeper目录下新建一个data目录, data目录下新建一个myid文件,master主机存放标识值1;slave1主机标识值为2;slave3主机标识值为3 7) 每台机器上命令:zkServer.sh start ,启动ZK,进程名:QuorumPeerMain 3. Hadoop安装与部署3.1安装Hadoop 1)filezilla上传安装包,hadoop-3.3.4.tar.gz 解压 2)bin目录的完整路径: /usr/local/hadoop/hadoop-3.3.4/bin 3)vim /etc/profile 配置jdk环境变量 4) 修改配置文件共6个: hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers 文件1: hadoop-env.sh; 增加jdk环境变量 文件2: core-site.xml; 配置临时目录及zookeeper信息 文件3: hdfs-site.xml; 配置hdfs信息 文件4: mapred-site.xml; 配置mapreduce和dfs权限信息 文件5: yarn-site.xml; 配置yarn资源调度信息 文件6: worker文件存放当前的worker节点名,复制到每一个虚拟机中 3.2启动Hadoop 1) 使用命令: hadoop-daemon.sh start journalnode 启动journalnode 进程(每个节点执行) 2) 使用命令: hadoop-daemon.sh start namenode 启动namenode 进程(master、slave1节点上执行) 3) 使用命令:hadoop-daemon.sh start datanode 在所有节点上启动datanode 进程 4) 使用命令:start-yarn.sh 在master上启动yarn 5) 使用命令: hdfs zkfc -formatZK 在ZK上生成ha节点 6) 使用命令: hadoop-daemon.sh start zkfc 启动 DFSZKFailoverController进程,在master节点执行 a. 访问HDFS的管理页面 http://192.168.0.20:50070 此处192.168.0.20为namenode节点的Active节点 http://192.168.0.21:50070 此处192.168.0.20为namenode节点的standby节点 3.3 验证HDFS使用 使用命令:hdfs dfs -ls / 查看HDFS中文件 使用命令:hdfs dfs -mkdir /input 在HDFS上创建目录 使用命令:hdfs dfs -put ./test.txt /input 将本地文件上传到HDFS指定目录 使用命令:hdfs dfs -get /input/test.txt ./tmp 将HDFS文件复制到本地目录 使用命令:hdfs dfs -text /input/test.txt 查看HDFS上的文本文件 web端浏览HDFS目录 3.4 验证MapReduce的wordcount案例 (1)先通过命令将带有文本内容的test2.txt文件上传到HDFS (2)对HDFS上test2.txt文件执行wordcount统计,结果放回HDFS新目录,命令: hadoop jar /usr/local/hadoop/hadoop-3.3.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input/test2.txt /out 4. Spark安装与部署3.1安装Scala (1)安装scala 上传scala压缩包解压,使用命令: scala -version 查看当前环境变量下的scala 版本 (2)拷贝scala目录和环境变量到其他两台机器 使用命令: scp -r /usr/local/scala root@slave1:/usr/local/ scp /etc/profile root@slave1:/etc/profile 3.2安装Spark (1)上传spark压缩包解压,修改配置文件 命令: vim /usr/local/spark/spark-3.3.1/conf/spark-env.sh (2) 新建worker目录,写入master机器名称3.3启动Spark (1)在master的spark安装目录下启动spark 命令: cd /usr/local/spark/spark-3.3.1/sbin ./start-all.sh (2)在slave1同样目录启动master进程 命令:./start-master.sh (3)访问spark管理页面ui 3.3 验证Spark的wordcount案例 (1)执行命令: cd /usr/local/spark/spark-3.3.1/bin ./spark-shell --master spark://master:7077 (3)从HDFS读取数据执行自定义wordcount代码,结果写入HDFS,命令: sc.textFile("hdfs://master:9000/input/test2.txt").flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_).map(pair=>(pair._2,pair._1)).sortByKey(false).map(pair=>(pair._2,pair._1)).saveAsTextFile("hdfs://master:9000/spark_out") (4)输出结果: 5. 后记 大数据技术日新月异,得益于互联网技术加持下的商业和工业模式变革。人们日益增长的对生活生产便捷性、数字化、智能化的需求,催生了数据爆炸式的增长,推动了大数据技术推陈出新。作为新时代的程序开发者,必须掌握一定的大数据基础知识才能适应时代的要求,本文只是一个引子,从自身实践的角度帮助初学者认识大数据,并基于此搭建自己属于自己的开发环境,希望大家能够在此基础上继续钻研有所建树。