一、Hadoop简介; 二、Hadoop构成:HDFS+MapReduce; 三、案例:部署Hadoop分布式存储集群; 一、Hadoop简介: 1.大数据略知一二: 1)大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产,需要在合理的时间内达到提取、管理、处理、并且整理成为帮助企业运营决策更积极目的的信息; 2)在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》 中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理; 3)大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。 2.图解大数据: http://www./blog/2017/07/iaas-paas-saas.html 3.项目起源: Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。 4.hadoop优点: 1)高可靠:在多台廉价商用机器群集上,善于存放超大文件; 2)高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。 3)高效性:处理速度较快。 4)高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。 5)低成本:hadoop是开源的,项目的软件成本因此会大大降低。 6)Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。 补充:云计算大数据必会单位(换算为1024=2^10;1B=8b,1汉字=2B) bit比特|位--byte字节--KB--MB--GB--TB--PB--EB--ZB--YB--BB--NB--DB 5.hadoop缺点: 1)低时间延迟的数据访问:要求在例如几十毫秒内完成数据访问的应用,不适合在HDFS上运行,HDFS虽然有强大的高数据吞吐量,但是以提高时间延迟为代价,可以使用HBase满足低延迟的访问需求; 2)无法高效存储大量小文件:大量小文件会造成整个文件系统的目录树和索引目录相对较大,而这些的元数据都会存放在namenode节点; 二、Hadoop构成:HDFS+MapReduce: 1.HDFS引擎结构: 1)Hadoop Distributed File System(HDFS)引擎:包括namenode(名称空间节点)和datanode(数据节点); https://www.cnblogs.com/liango/p/7136448.html 基础概念: 1)文件块:Block,datanode中存放数据最小逻辑单元,默认块大小为64M,便于管理,不受磁盘限制,数据可在datanode的总block中进行冗余备份,存储的副本数量要少于datanode节点的数量,当一个或多个块出现故障,用户可以直接去其他地方读取数据副本; 2)NameNode:管理文件系统的命名空间,属于管理者角色,维护文件系统树内所有文件和目录,记录每个文件在各个DataNode上的位置和副本信息,并协调客户端对文件的访问; 3)DataNode:负责处理文件系统客户端的文件读写请求,存储并检索数据块,并定期向NameNode发送所存储的块的列表,属于工作者角色。负责所在物理节点的存储管理,按照一次写入,多次读取的原则,存储文件按照Block块进行存储; 4)Secondary NameNode:相当于NameNode的快照,也称之为二级NameNode,能够周期性的备份NameNode,记录NameNode上的元数据等。为防止NameNode进程出现故障,起到备份作用; 2. MapReduce 引擎构成: 1)MapReduce 引擎:是用于并行处理计算大数据集的软件框架,是HDFS(对于本文)的上一层,与hadoop结合工作,将用户的任务分发到上千台商用机器组成的集群上。最简单的 MapReduce应用程序至少包含 2个部分:一个 Map (映射)函数、一个 Reduce (归纳)函数,Map负责将任务分解成多个子任务,reduce负责把分解后的多任务的处理结果进行汇总; JobTrackers :是一个master进程,用于作业的调度和管理工作,一个Hadoop集群中只有一台JobTracker; TaskTrackers:运行在多个节点上的Slave服务,用于执行任务。TaskTracker需要运行在HDFS的DataNode节点上; MapReduce 引擎的缺点:JobTracker单点瓶颈(负责集群心跳信息、作业管理)、JobTracker分配作业延迟高、缺乏灵活性; 2) YARN架构:是MapReduce 引擎的V2版本,解决MapReduce 引擎面临的性能瓶颈问题,将集群资源管理和作业调度进行分离; ResourceManager进程:管理集群资源的资源管理器 MapReduce:管理作业任务 3)数据仓库工具Hive和分布式数据库Hbase:NoSQL数据库 3.Hadoop核心概念注意事项: 1)HDFS把节点分成两类:NameNode和DataNode。NameNode是唯一的,程序与之通信,然后从DataNode上存取文件。这些操作是透明的,与普通的文件系统API没有区别。 2)MapReduce则是JobTracker节点为主,分配工作以及负责和用户程序通信。 3)HDFS和MapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算。 4)Hadoop也跟其他云计算项目有共同点和目标:实现海量数据的计算。而进行海量计算需要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。 5)60款大数据软件:http://blog.csdn.net/SunWuKong_Hadoop/article/details/53580425 6)Hadoop生态:http://blog.csdn.net/u010270403/article/details/51493191 三、案例:部署Hadoop分布式存储集群: 环境:
版本要求: hadoop版本>=2.7:要求Java 7(openjdk/oracle) hadoop版本<=2.6:要求Java 6(openjdk/oracle) 步骤: Ø配置所有节点间的域名解析及创建用户(所有节点配置相同,在此列举master节点配置); Ø配置master节点远程管理slave节点; Ø在所有节点安装JDK环境(所有节点配置相同,在此列举master节点配置); Ø在所有节点安装Hadoop并简要配置(所有节点配置相同,在此列举master节点配置); Ø在master节点进行配置hadoop服务,并将配置文件复制到slave节点上; Ø在master节点初始化并且启动Hadoop进程; Ø验证slave节点的进程状态; Ø网页查看http://master:50070统计hadoop集群的信息; ØHadoop中数据的基本管理; Ø配置所有节点间的域名解析及创建用户(所有节点配置相同,在此列举master节点配置): [root@master ~]# hostnamectl set-hostname master [root@master ~]# cat < 192.168.100.101 master 192.168.100.102 slave1 192.168.100.103 slave2 END [root@master ~]# useradd hadoop [root@master ~]# echo "hadoop" |passwd --stdin hadoop Ø配置master节点远程管理slave节点: [root@master ~]# su - hadoop 上一次登录:四 5月 31 01:54:26 CST 2018pts/0 上 [hadoop@master ~]$ ssh-keygen -t rsa [hadoop@master ~]$ ssh-copy-id hadoop@192.168.100.101 [hadoop@master ~]$ ssh-copy-id hadoop@192.168.100.102 [hadoop@master ~]$ ssh-copy-id hadoop@192.168.100.103 [hadoop@master ~]$ ssh hadoop@master ##远程连接slave节点,进行确认key值文件,不然在启动hadoo时,会出现key的问题导致无法启动 [hadoop@master ~]$ ssh hadoop@slave1 [hadoop@master ~]$ ssh hadoop@slave2 Ø在所有节点安装JDK环境(所有节点配置相同,在此列举master节点配置): [hadoop@master ~]$ exit [root@master ~]# tar zxvf jdk-8u171-linux-x64.tar.gz [root@master ~]# mv /root/jdk1.8.0_171/ /usr/local/java/ [root@master ~]# ls /usr/local/java/ [root@master ~]# cat < JAVA_HOME=/usr/local/java/ JRE_HOME=\$JAVA_HOME/jre CLASS_PATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH END [root@master ~]# source /etc/profile [root@master ~]# java -version java version "1.8.0_171" Ø在所有节点安装Hadoop并简要配置(所有节点配置相同,在此列举master节点配置): [root@master ~]# tar zxvf hadoop-2.7.6.tar.gz [root@master ~]# mv /root/hadoop-2.7.6/ /usr/local/hadoop/ [root@master ~]# ls /usr/local/hadoop/ bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share [root@master ~]# cat < export HADOOP_HOME=/usr/local/hadoop/ export PATH=\$PATH:\$HADOOP_HOME/bin END [root@master ~]# source /etc/profile [root@master ~]# echo "export JAVA_HOME=/usr/local/java/" >>/usr/local/hadoop/etc/hadoop/hadoop-env.sh ##设置HDFS存储加载jdk的环境变量 [root@master ~]# echo "export JAVA_HOME=/usr/local/java/" >>/usr/local/hadoop/etc/hadoop/yarn-env.sh ##设置mapreduce的V2版本--YARN加载jdk的环境变量 [root@master ~]# mkdir /usr/local/hadoop/name/ ##存放namenode中元数据的位置 [root@master ~]# mkdir /usr/local/hadoop/data/ ##存放datanode中的数据目录 [root@master ~]# mkdir /usr/local/hadoop/tmp/ ##存放用户临时文件 [root@master ~]# mkdir /usr/local/hadoop/var/ ##存放服务动态变化文件 [root@master ~]# chown hadoop /usr/local/hadoop/ -R Ø在master节点进行配置hadoop服务,并将配置文件复制到slave节点上; [root@master ~]# su - hadoop [hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/core-site.xml ##指定名称节点namenode的相关配置 [hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml ##指定hdfs存储的相关配置 [hadoop@master ~]$ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml ##修改mapreduce配置文件,将其改为YARN模型 [hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/mapred-site.xml ##指定MapR的相关配置 [hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/slaves ##指定slave的名称 slave1 slave2 附:此文件明确指定DataNode节点,可以通过节点的添加和减少来满足整个hadoop群集的伸缩性,添加节点时,首先将新节点的配置保证与NameNode节点配置相同,在此文件指定新的DataNode节点名,重新启动NameNode便完成。但为保证原有DataNode节点与新添加DataNode节点的数据进行均衡存储,需要执行此命令进行重新平衡数据块的分布:/usr/local/hadoop/sbin/start-balancer.sh [hadoop@master ~]$ vi /usr/local/hadoop/etc/hadoop/yarn-site.xml ##指定YARN的相关配置 [hadoop@master ~]$ scp -r /usr/local/hadoop/etc/hadoop/* hadoop@192.168.100.102:/usr/local/hadoop/etc/hadoop/ [hadoop@master ~]$ scp -r /usr/local/hadoop/etc/hadoop/* hadoop@192.168.100.103:/usr/local/hadoop/etc/hadoop/ Ø在master节点初始化并且启动Hadoop进程: [hadoop@master ~]$ /usr/local/hadoop/bin/hdfs namenode -format [hadoop@master ~]$ ls /usr/local/hadoop/name/ ##初始化所生成的名称节点文件 current 注:第一次执行格式化,提示信息如上图,如若第二次再次执行格式化,需要将namenode节点的/usr/local/hadoop/name/目录内容清空,并且将datanode节点的/usr/local/hadoop/data/目录清空,方可再次执行格式化,否则会造成namenode节点与datanode节点的数据版本ID不一致,导致启动服务失败; [hadoop@master ~]$ /usr/local/hadoop/sbin/start-all.sh ##启动hadoop的所有进程 This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starting namenodes on [master] master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-master.out slave2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-slave2.out slave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-slave1.out Starting secondary namenodes [master] master: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-master.out starting yarn daemons starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-resourcemanager-master.out slave2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-nodemanager-slave2.out slave1: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-nodemanager-slave1.out 注:/usr/local/hadoop/sbin/start-all.sh命令等于/usr/local/hadoop/sbin/start-dfs.sh加/usr/local/hadoop/sbin/start-yarn.sh,前者启动hdfs系统,后者启动mapreduce调度工具,关闭两进程的命令为/usr/local/hadoop/sbin/stop-all.sh [hadoop@master ~]$ netstat -utpln (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:50070 0.0.0.0:* LISTEN 7266/java ##namenode进程的http端口 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 192.168.100.101:8088 0.0.0.0:* LISTEN 7623/java tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp 0 0 192.168.100.101:8030 0.0.0.0:* LISTEN 7623/java tcp 0 0 192.168.100.101:8032 0.0.0.0:* LISTEN 7623/java tcp 0 0 192.168.100.101:8033 0.0.0.0:* LISTEN 7623/java tcp 0 0 192.168.100.101:8035 0.0.0.0:* LISTEN 7623/java tcp 0 0 192.168.100.101:9000 0.0.0.0:* LISTEN 7266/java ##客户端连接hdfs系统时用到的端口 tcp 0 0 192.168.100.101:50090 0.0.0.0:* LISTEN 7467/java ## secondary namenode进程的http端口 [hadoop@master ~]$ /usr/local/hadoop/bin/hdfs dfsadmin -report ##查看hadoop存储节点的状态信息 Configured Capacity: 39631978496 (36.91 GB) Present Capacity: 33541480448 (31.24 GB) DFS Remaining: 33541472256 (31.24 GB) DFS Used: 8192 (8 KB) DFS Used%: 0.00% Under replicated blocks: 0 Blocks with corrupt replicas: 0 Missing blocks: 0 Missing blocks (with replication factor 1): 0 ------------------------------------------------- Live datanodes (2): Name: 192.168.100.103:50010 (slave2) Hostname: slave2 Decommission Status : Normal Configured Capacity: 19815989248 (18.46 GB) DFS Used: 4096 (4 KB) Non DFS Used: 3045191680 (2.84 GB) DFS Remaining: 16770793472 (15.62 GB) DFS Used%: 0.00% DFS Remaining%: 84.63% Configured Cache Capacity: 0 (0 B) Cache Used: 0 (0 B) Cache Remaining: 0 (0 B) Cache Used%: 100.00% Cache Remaining%: 0.00% Xceivers: 1 Last contact: Thu May 31 03:03:09 CST 2018 Name: 192.168.100.102:50010 (slave1) Hostname: slave1 Decommission Status : Normal Configured Capacity: 19815989248 (18.46 GB) DFS Used: 4096 (4 KB) Non DFS Used: 3045306368 (2.84 GB) DFS Remaining: 16770678784 (15.62 GB) DFS Used%: 0.00% DFS Remaining%: 84.63% Configured Cache Capacity: 0 (0 B) Cache Used: 0 (0 B) Cache Remaining: 0 (0 B) Cache Used%: 100.00% Cache Remaining%: 0.00% Xceivers: 1 Last contact: Thu May 31 03:03:09 CST 2018 [hadoop@master ~]$ jps 7266 NameNode ##namenode节点主进程 7623 ResourceManager ##mapreduce管理进程 7467 SecondaryNameNode ##namenode的备份进程,避免namenode进程意外停止,客户端无法读写数据 7883 Jps Ø验证slave节点的进程状态; [root@slave1 ~]$ su - hadoop [hadoop@slave1 ~]$ netstat -utpln (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:13562 0.0.0.0:* LISTEN 3391/java tcp 0 0 0.0.0.0:50010 0.0.0.0:* LISTEN 3274/java tcp 0 0 0.0.0.0:50075 0.0.0.0:* LISTEN 3274/java tcp 0 0 0.0.0.0:39938 0.0.0.0:* LISTEN 3391/java tcp 0 0 0.0.0.0:50020 0.0.0.0:* LISTEN 3274/java tcp 0 0 127.0.0.1:38373 0.0.0.0:* LISTEN 3274/java tcp 0 0 0.0.0.0:8040 0.0.0.0:* LISTEN 3391/java tcp 0 0 0.0.0.0:8042 0.0.0.0:* LISTEN 3391/java [hadoop@slave1 ~]$ jps 3526 Jps 3274 DataNode 3391 NodeManager ##与namenode执行心跳信息的节点进程 Ø网页查看http://master:50070统计hadoop集群的信息; ØHadoop中数据的基本管理: [hadoop@master ~]$ pwd /home/hadoop [hadoop@master ~]$ touch 1.file [hadoop@master ~]$ ls 1.file [hadoop@master ~]$ hadoop fs -ls file:///home/hadoop/ ##查看本地文件 [hadoop@master ~]$ hadoop fs -ls / ##查看hadoop文件 [hadoop@master ~]$ hadoop fs -mkdir /input1 [hadoop@master ~]$ hadoop fs -put /home/hadoop/1.file /input1 ##上传本地文件 [hadoop@master ~]$ hadoop fs -ls /input1 Found 1 items -rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input1/1.file [hadoop@master ~]$ hadoop fs -cat /input1/1.file ##查看hadoop文件内容 [hadoop@master ~]$ hadoop fs -cat file:///home/hadoop/1.file ##查看本地文件内容 [hadoop@master ~]$ hadoop fs -get /input1/1.file /tmp ##下载hadoop文件 [hadoop@master ~]$ ls /tmp/ 1.file [hadoop@master ~]$ hadoop fs -mkdir /input2 [hadoop@master ~]$ hadoop fs -mv /input1/1.file /input2/1.txt [hadoop@master ~]$ hadoop fs -ls /input2 Found 1 items -rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input2/1.txt [hadoop@master ~]$ hadoop fs -cp /input2/1.txt /input2/2.txt [hadoop@master ~]$ hadoop fs -ls /input2 Found 2 items -rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input2/1.txt -rw-r--r-- 2 hadoop supergroup 0 2018-05-31 08:01 /input2/2.txt [hadoop@master ~]$ hadoop fs -rm /input2/2.txt ##删除单个文件 18/05/31 08:01:40 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. Deleted /input2/2.txt [hadoop@master ~]$ hadoop fs -ls /input2 Found 1 items -rw-r--r-- 2 hadoop supergroup 0 2018-05-31 07:38 /input2/1.txt [hadoop@master ~]$ hadoop fs -rmr /input2/ ##递归删除目录 rmr: DEPRECATED: Please use 'rm -r' instead. 18/05/31 08:06:23 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. Deleted /input2 [hadoop@master ~]$ hadoop fs -ls / Found 1 items drwxr-xr-x - hadoop supergroup 0 2018-05-31 07:58 /input1 [hadoop@master ~]$ hadoop fs -test -e /input1/ ##查看文件或目录是否存在,存在返回值为0,不存在返回值为1 [hadoop@master ~]$ echo $? 0 [hadoop@master ~]$ hadoop fs -test -e /input1/2.file [hadoop@master ~]$ echo $? 1 [hadoop@master ~]$ hadoop fs -du /input1 ##查看目录中文件的所有文件的大小 0 /input1/2.file._COPYING_ [hadoop@master ~]$ hadoop fs -du -s /input1 ##查看目录本身的大小 0 /input1 [hadoop@master ~]$ hadoop fs -expunge ##清空回收站 [hadoop@master ~]$ hadoop fs -chmod 777 /input1 [hadoop@master ~]$ hadoop fs -chown hadoop:hadoop /input1 [hadoop@master ~]$ hadoop fs -ls / Found 1 items drwxrwxrwx - hadoop hadoop 0 2018-05-31 07:58 /input1 |
|