现在已经进入了大数据(Big Data)时代,数以万计用户的互联网服务时时刻刻都在产生大量的交互,要处理的数据量实在是太大了,以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代出现,在解决大数据存储和计算方面有很多的优势。
大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的大量数据集合,是需要新的处理模式才能具备更强的决策能力、洞察发现能力和流程优化能力的海量、高增长率和多样化的信息资产数据。简而言之,就是数据量非常大,大到无法用常规工具处理,如关系型数据库、数据仓库等。这里的“大”又是一个什么量级呢?如阿里巴巴每天所处理的交易数据达到 20PB(即 20971520GB)。传统数据处理技术为何不能胜任?主要原因是关系型数据库是针对表、字段、行这种可使用二维表格表示的结构化数据而设计的,而大数据通常是针对文本这种非结构化数据。
数据量大是大数据的显著特点,归纳来说大数据特点如下:
另外,大数据也是一种方法论。原则是“一切都被记录,一切都被数字化,从数字里寻找需求、寻找知识、发掘价值”,这是一种新的思维方式,不同于此前的专家方式,而是通过数据分析来得到结论,这是大数据时代的一个显著特征。这也就要求技术人员拥有能够从各种各样类型的数据中快速获得有价值信息的能力。
目前,有很多大数据处理系统可以处理大数据
Hadoop生态圈
当然还有大量其它项目加入到 Hadoop 生态圈,如:
经过近十多年的发展,越来越多的项目加入到了 Hadoop 的生态圈。在本课程中着重介绍3个模块,分别是:HDFS、MapReduce、HBase。对于 Hadoop 应用开发人员来说,这也是最基本的模块。
Hadoop 的 MapReduce 框架源自于 Google 的 MapReduce 论文。在 Google 发表论文时,MapReduce最大成就是重写了 Google的索引文件系统。现在,MapReduce波广泛地应用于日志分析、海量数据排序、在海量数据中查找特定模式等场景中。
Hadoop 中,并行应用程序的开发是基于 MapReduce 编程模型的,基于它可以各任务分发到由上千台商用机器组成的集群上,实现Hadoop 的并行任务处理功能。前面提过,HDFS 和 MapReduce 二者相互作用,共同完成了 Hadoop 分布式集群的主要任务。
与 HDFS 架构设计相似,Hadoop 中用于执行 MapReduce 作业的机器也有两个角色:JobTracker 和 TaskTracker.
基于 JobTracker 和 TaskTracker 的运行架构为 MapReduce V1,在下一代MapReduce V2 中,V1 架构已被 YARN 替代。关于 YARN 在本章稍后会讲解。从学习的难易程度来看,应该先了解 MapReduce V1。不论是 V1还是 V2,都不会影响编写 MapReduce 程序,好比同样是一个 Web 应用,运行在 Tomcat 与 Jetty 下的效果是相同的。由此可见,实际上运行 MapReduce 作业的过程对开发人员是透明的。
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
hostnamectl set-hostname node1
bash
hostnamectl set-hostname node2
bash
hostnamectl set-hostname node3
bash
cat <>/etc/hosts
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
EOF
[root@node1 ~]# groupadd hadoop
[root@node1 ~]# useradd -g hadoop hduser
[root@node1 ~]# passwd hduser
此处设置密码
[root@node1 ~]# visudo
在末尾添加:
hduser ALL=(ALL) ALL
6.安装JDK
[root@node1 ~]# rpm -ivh jdk-8u171-linux-x64.rpm
[root@node1 ~]# vim /etc/profile
在末尾添加:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
[root@node1 ~]# source /etc/profile
[root@node1 ~]# su - hduser
[hduser@node1 ~]$ ssh-keygen -t rsa //一路回车键即可
[hduser@node1 ~]$ ssh-copy-id hduser@node1
[hduser@node1 ~]$ ssh-copy-id hduser@node2
[hduser@node1 ~]$ ssh-copy-id hduser@node3
在node1上操作
[hduser@node1 ~]$ tar zxvf hadoop-2.6.5.tar.gz
[hduser@node1 ~]$ mv hadoop-2.6.5 hadoop
[hduser@node1 ~]$ sudo vim /etc/profile
在末尾添加:
export HADOOP_HOME=/home/hduser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
[hduser@node1 ~]$ source /etc/profile
[hduser@node1 ~]$ cd ~/hadoop/etc/hadoop/
[hduser@node1 hadoop]$ vim hadoop-env.sh
在末尾添加:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
[hduser@node1 hadoop]$ vim yarn-env.sh
在末尾添加
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
[hduser@node1 hadoop]$ vim slaves
清空文件中原有的内容
node2
node3
[hduser@node1 hadoop]$ vim core-site.xml
在末尾找到模块
在里面添加配置:
fs.defaultFS
hdfs://node1:9000
hadoop.tmp.dir
file:/home/hduser/hadoop/tmp
备注:定义hdfs的uri,以及hdfs的临时目录
[hduser@node1 hadoop]$ vim hdfs-site.xml
在末尾找到模块
在里面添加:
dfs.namenode.secondary.http-address node1:50090
dfs.namenode.name.dir
file:/home/hduser/hadoop/dfs/name
dfs.datanode.data.dir
file:/home/hduser/hadoop/dfs/data
dfs.replication
2
dfs.webhdfs.enabled
true
备注:
名称节点和数据节点的存放位置,文件副本数和读取权限。
[hduser@node1 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hduser@node1 hadoop]$ vim mapred-site.xml
在末尾找到模块,在里面添加:
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
node1:10020
mapreduce.jobhistory.webapp.address
node1:19888
备注:Mapreduce作业记录的web地址和端口。
[hduser@node1 hadoop]$ vim yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.address
node1:8032
yarn.resourcemanager.scheduler.address
node1:8030
yarn.resourcemanager.resource-tracker.address
node1:8035
yarn.resourcemanager.admin.address
node1:8033
yarn.resourcemanager.webapp.address
node1:8088
备注:
resourcemanager、nodemanager的通信端口,web端口等信息
[root@node1 ~]#scp -r /home/hduser/hadoop node2:/home/hduser
[root@node1 ~]#scp -r /home/hduser/hadoop node3:/home/hduser
[hduser@node1 ~]$ cd hadoop/
[hduser@node1 hadoop]$ bin/hdfs namenode -format
[hduser@node1 hadoop]$ sbin/start-dfs.sh
[hduser@node1 hadoop]$ jps
16721 Jps
15687 NameNode
15866 SecondaryNameNode
[hduser@node1 hadoop]$ sbin/start-yarn.sh
[hduser@node1 hadoop]$ bin/hdfs dfsadmin -report
http://192.168.10.101:50070
WordCount 实现了对文本中的单词计数的功能,并要求输出结果并按单词首字母排序
[hduser@node1 ~]$ mkdir ~/file
[hduser@node1 ~]$ cd ~/file/
[hduser@node1 file]$ echo "ni hao hadoop">file1.txt
[hduser@node1 file]$ echo "hello hadoop hi china">file2.txt
[hduser@node1 file]$ cd ~/hadoop/
[hduser@node1 hadoop]$ sbin/start-all.sh
[hduser@node1 hadoop]$ bin/hadoop fs -mkdir /input2
[hduser@node1 hadoop]$ bin/hadoop fs -put ~/file/file* /input2/
[hduser@node1 hadoop]$ bin/hadoop fs -ls /input2/
[hduser@node1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /input2/ /output2/wordcount1
注意:输出目录不能已存在,否则不会输出
6.查看执行结果
[hduser@node1 hadoop]$ bin/hadoop fs -cat /output2/wordcount1/*
如果看到输出结果证明hadoop安装成功