缘起

大学的时候,记得班里好多同学学习Android、iOS开发,那时候客户端开发非常火,并且工作后工资也很高。但是我并没有心动,我觉得这么多人去学并不一定是件好事,很可能跟网站开发一样,一段时间市场饱和后就不会有那么大的需求量,现在看来这个判断是正确的。我想学习一门技术现在处于起步期,但是未来比较长的一段时间里发展前景比较好。那个时候是大四,正在跟同学做一个小创业项目,我在里面负责网站方面的建设,没事的时候经常上网,偶然发现大数据相关的文章。我觉得这可能是个新方向,移动互联网时代,我们上网的频率更高,时间更长,会有更多的数据产生,从而需要大数据技术做存储和计算。自从那以后就开始找大数据相关的资料,然后知道有 Hadoop 这么个东西,刚开始在网上找了几节入门级的免费视频,看完之后还是云里雾里,对大数据技术没有任何感知。并且那个时候(14年)大数据方面的工作机会比较小,小公司基本没有相关的技术,我还担心学了之后不好找工作。为了避免翻车,就买了付费的视频开始学习。每天睁开眼就开始学,一直学到半夜12点。坚持了俩月,最后找了大数据岗位的实习工作,算是正式上车了。到目前为止从事大数据相关的工作已经快4年了,技术方面接触了 Flume、Kafka、Hadoop、Spark、Hbase、Hive、Kylin 等框架,业务方面接触过定位数据、视频数据、搜索数据。觉得在大数据方面有一些积累,因此想做一个大数据技术方面的教程,供初学者参考。

学习路线

现在关于大数据入门教程很多,如果时间比较充裕可以找一套视频慢慢跟着学,毕竟听别人讲比自己看书学的要快。现在比较知名的一些培训网站应该都有免费的入门视频,可以找找看。如果没有大块的时候,可以看书或者看博客。学习大数据一般是先学 Hadoop,Hadoop在大数据领域的地位就不用在强调了。有些人可能会说是不是 Hadoop 已经过时了,其实并没有。一方面,Hive、Kylin等框架计算层面对 Hadoop 有依赖,并且 Spark 等新兴的框架也是基于Hadoop 的思想;另一方面,目前不少企业数据存储用的是 HDFS,数据处理仍然用 MapReduce,对于一些实时性要求不高的任务,MapReduce跑起来还是很稳的。

学习Hadoop 核心在于学习分布式存储和计算。学习大数据技术一个比较高的门槛就是要理解分布式。以前我们写的程序都是单机的,最多也就是个多线程。但大数据框架都是分布式的,需要学习数据如何分布式存储、如何保证可靠、机器之间如何通信、数据如何分散到不同的机器计算等,这是思维方式的转变。初学者可以在网上先找一些评论比较高的入门资料,也可以跟着本教程学习,先整体理解分布式的概念。有了点基础之后再学习《Hadoop权威指南》,学完之后基本上对Hadoop框架有了深入理解,能够熟练的写 MapReduce 做数据处理。

掌握 Hadoop 之后,再往下走有两个方向。一个方向是做实时计算,需要学习 Spark 和 Flink 等框架,这两个框架都是批流统一分布式计算框架。Spark 目前比较主流,社区也比较完善,但是开发语言用 Scala,并且分布式计算的思想在 Hadoop 之上又抽象了许多概念,因此入门有些门槛,一旦入门口后再开发就很顺手了。Spark的书可以看看《Spark技术内幕》。Flink 之前生态不如 Spark,但最近阿里将 Blink 贡献给 Flink 社区,相信以后 Flink 的发展会更好,社区会更强大。Flink 做更适合做硬实时的计算。另一个方向就是数据仓库建设,用到 Hive、Kylin 等框架。基本上每个公司都有数仓建设团队,Hive 适合离线大数据计算,使用SQL语言开发。SQL语言门槛比较低,所有有些公司会培养业务人员或者产品经理写SQL,而程序员更专注数仓的建设。Kylin主要是满足交互式查询,适合做多维分析。多维分析的框架除了Kylin还有很多,大家可以自行上网查阅对比。这个方向更加侧重数据建模,相关的的书推荐《Hive权威指南》、《维度建模工具箱》、《阿里巴巴大数据之路》。

工具以及技术掌握熟练之后,再往下走就是数据分析。数据最终是要提供决策,所以,数据分析的能力很重要。如果只是写个SQL、跑个数,长期下去并不利于我们的成长。我们要经常对数据作分析,培养数据的敏感度,能够通过数据对产品提出指导意见。这个过程可能会用到数据挖掘相关的技术。做大数据相关的工作跟其他的程序员还是有比较大的区别。 一方面我们能够掌握所有的数据,另一方面我们可以通过数据分析指导决策。

本章剩下的部分就从搭建 Hadoop 集群开始,学习 Hadoop 技术。搭建 Hadoop 集群一般用 Cloudera Manager 或者 HortonWorks,搭建起来很容易。我在之前的公司是用 Cloudera Manager 搭建 Hadoop 集群,并且公司经常需要到客户的服务器单独部署大数据计算服务,因此对 Cloudera 那套东西非常熟。熟到什么程度呢,通过搭建本地 Http 服务,基本上10分钟左右就能搭建一个集群。但我们现在是在学习 Hadoop 技术,所以还是自己亲子搭建集群更利于我们学习。

准备

至少得是一台 8G 内存的电脑,我们做开发 CPU 基本上差不到哪儿去。安装VMware或者VirtualBox,搭建三台虚拟机。我的电脑 16G 内存,三台虚拟机配置如下:

操作系统:Centos 7.3 64位
内存:1GB
硬盘: 40G
CPU:1核
主机名与IP对应关系
192.168.29.132 hadoop0
192.168.29.133 hadoop1
192.168.29.134 hadoop2

下载 JDK 和 稳定版的 Hadoop,我用JDK8 + Hadoop 2.9.2,对应的文件名为 jdk-8u151-linux-x64.tar.gz hadoop-2.9.2.tar.gz。

配置hosts

首先,需要给每个虚拟机设置 hostname

hostnamectl set-hostname hadoop0

在 /etc/hosts文件中加入三台主机的IP和hostname的对应关系

192.168.29.132 hadoop0
192.168.29.133 hadoop1
192.168.29.134 hadoop2

关闭防火墙

打开防火墙不方便机器之前的通信,并且公司的 Hadoop 集群一般是再内网搭建,所以可以关闭防火墙。需要在这三台主机执行以下命令

systemctl stop firewalld.service    #关闭防火墙
systemctl disable firewalld.service #禁止开启启动

设置SSH免密码登录

我们可能需要在一台机器上启动集群其他主机的服务,就需要SSH登录到其他主机,这时候设置SSH免密码登录会比较方面。在三台机器上执行以下命令

ssh-keygen -t rsa

执行完毕后,会在 ~/.ssh 目录里发现 id_rsa.pub 文件。在主机 hadoop0 中执行以下命令

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

执行后,将其他两台主机的 ~/.ssh/id_rsa.pub 文件中的内容复制到 hadoop0 的 ~/.ssh/authorized_keys 文件中,然后执行以下命令

scp ~/.ssh/authorized_keys hadoop1:~/.ssh
scp ~/.ssh/authorized_keys hadoop2:~/.ssh

这样便可以实现在任意一台机器都可以通过SSH免密码登录到其他两台机器。

安装JDK

在三台主机中都要安装JDK,安装JDK直接解压 tar.gz 文件即可。将解压后的目录配置到环境变量中,环境变量可以在 /etc/profile 文件中配置,内容如下

# /etc/profile
JAVA_HOME=/work/software/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH

修改文件后,直接 source /etc/profile 使配置生效,再通过 java -version 命令验证配置是否正确。

安装并配置 Hadoop

安装 Hadoop 在 hadoop0 一台机器操作即可,安装 Hadoop 也是解压 tar.gz 文件,同时在 /etc/profile 中配置 HADOOP_HOME,文件内容如下

# /etc/profile
JAVA_HOME=/work/software/jdk1.8.0_151
HADOOP_HOME=/work/software/hadoop-2.9.2
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

Hadoop的配置主要包括 hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 、slaves 文件。这些文件在 Hadoop 解压目录中 etc/hadoop 目录里。在进行配置之前,先简单看一下 hadoop 框架中几个组件

HDFS NameNode:数据存储主节点,管理文件系统和命名空间,一般1个,可以两个做高可用
HDFS DataNode:数据存储从节点,主要是用来存储数据,一般跟集群机器节点个数一样
ResourceManager:资源管理的节点,接受任务并分配资源,一般1个,也可以2个做高可用
NodeManager:运行任务的容器,一般跟DataNode节点在一起
JobHistoryServer:管理历史任务

了解基本概念后, 接下来看看具体的配置。

hadoop-env.sh

主要设置 JAVA_HOME,打开 hadoop-env.sh 文件,找到 JAVA_HOME 的赋值语句,修改如下

export JAVA_HOME=/work/software/jdk1.8.0_151

core-site.xml

<configuration><property> <!--配置hdfs namenode节点--><name>fs.defaultFS</name><value>hdfs://hadoop0:9000</value></property>
</configuration>

hdfs-site.xml

<configuration><property> <!--NameNode namespace等信息存储路径--><name>dfs.namenode.name.dir</name><value>/data/dfs/name</value></property><property>  <!--DataNode 存储数据的路径,需要在本地建立/data/dfs目录 --><name>dfs.datanode.data.dir</name><value>/data/dfs/data</value></property><property>  <!--配置secondarynamnode节点--><name>dfs.namenode.secondary.http-address</name><value>hadoop1:50090</value></property>
</configuration>

yarn-site.xml

<configuration><property> <!--配置resourcemanager节点--><name>yarn.resourcemanager.hostname</name><value>hadoop0</value></property><property> <!--指定shuffle--><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><!--打开日志聚合--><name>yarn.log-aggregation-enable</name><value>true</value></property>
</configuration>         

mapred-site.xml

<configuration><property> <!--配置资源管理框架--><name>mapreduce.framework.name</name><value>yarn</value></property><property>  <!--配置 jobhistory 节点--><name>mapreduce.jobhistory.address</name><value>hadoop2:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop2:19888</value></property>
</configuration>

slaves

hadoop0
hadoop1
hadoop2

配置完毕后,将 hadoop-2.9.2 目录,复制到另外两台机器中, 并配置这两台机器的 HADOOP_HOME,并建立 DataNode 存储数据的目录 /data/dfs

scp -r /work/software/hadoop-2.9.2 hadoop1:/work/software
scp -r /work/software/hadoop-2.9.2 hadoop2:/work/software

启动集群

在主机 hadoop0 中,进入 /work/software/hadoop-2.9.2 目录中,执行以下命令

./sbin/start-dfs.sh
./sbin/start-yarn.sh

可以看到命令执行过程中打印的日志,会根据 slaves 文件到其他的机器启动相应的进程。可以在每台机器执行 jps 命令,看看启动了哪些进程。

在 hadoop2 机器中,启动 jobhistoryserver 进程,同样进入到 /work/software/hadoop-2.9.2,执行以下命令

./sbin/mr-jobhistory-daemon.sh --config etc/hadoop start historyserver

验证集群

可以通过 jps 命令,看看集群中的每台机器是不是启动了相应的服务。同时,可以通过web界面查看集群的状态以及配置,可以在物理机访问以下页面,需要在物理机配置hosts,否则需要用 IP 地址访问

NameNode web页面:        hadoop0:50070
ResourceManager web页面:     hadoop0:8088
HistoryServer web页面:      hadoop2:19888

总结

这篇文章主要介绍了大数据一些基本概念, 学习路线,最后动手搭建了 Hadoop 集群,希望能够对初学的同学有帮助。后续讲解 Hadoop 技术框架的细节。

转载于:https://www.cnblogs.com/duma/p/10428700.html

大数据技术 - 学习之路(一)相关推荐

  1. 大数据技术 学习之旅_数据-数据科学之旅的起点

    大数据技术 学习之旅 什么是数据科学? (What is Data Science?) The interesting thing about Data Science is that it is a ...

  2. 大数据技术 学习之旅_为什么聚焦是您数据科学之旅的关键

    大数据技术 学习之旅 David Robinson, a data scientist, has said the following quotes: 数据科学家David Robinson曾说过以下 ...

  3. 大数据技术 学习之旅_如何开始您的数据科学之旅?

    大数据技术 学习之旅 Machine Learning seems to be fascinating to a lot of beginners but they often get lost in ...

  4. [XW大数据技术学习探讨] 公众号学习笔记

    [XW大数据技术学习探讨] 公众号学习笔记 一.前言: 博主是某学校大数据专业大二的学生,我们专业的老师XW为了更好的帮助我们学习大数据技术,建立了微信公众号"XW大数据技术学习探讨&quo ...

  5. 网易大数据工程师学习之路分享

    之所以忽然提笔,是因为这段时间正好在业余时间系统地学习Spark,整个学习思路让我想起了大学期间学习<模拟电子电路>这门课的一些方法,个人觉得可以作为一个学习模板来和大家一起交流分享(本文 ...

  6. 大数据技术学习路线指南

    大数据技术作为决策神器,日益在社会治理和企业管理中起到不容忽视的作用,美国,欧盟都已经将大数据研究和使用列入国家发展的战略,类似谷歌,微软,百度,亚马逊等巨型企业也同样把大数据技术视为生命线以及未来发 ...

  7. ssm大数据技术学习网0y331【独家源码】 应对计算机毕业设计困难的解决方案

    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考. 系统的选题背景和意义 选题背景: 随着信息技术的快速发展和互联网的普及,大数据技术在各个领域中扮演着 ...

  8. 大数据技术学习路线,有信心能坚持学习的朋友,从现在开始吧

    如果你看完有信心能坚持学习的话,那就当下开始行动吧! 推荐下我自己建的大数据学习交流群:199427210,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分 ...

  9. 大数据学习路线图 让你精准掌握大数据技术学习

    大数据指不用随机分析法这样捷径,而采用所有数据进行分析处理的方法.互联网时代每个企业每天都要产生庞大的数据,对数据进行储存,对有效的数据进行挖掘分析并应用需要依赖于大数据开发,大数据开发课程采用真实商 ...

  10. 大数据技术学习,深度挖掘大数据的现状分析

    企业级技术 = 艰苦的工作 其实大数据有趣的是它不是直接可以炒作的东西. 能够获得广泛兴趣的产品和服务往往是那些人们可以触摸和感受到的,比如:移动应用,社交网络,可穿戴设备,虚拟现实等. 但大数据,从 ...

最新文章

  1. python2 python3编码_Python2和Python3编码问题-从底层出发
  2. c++ opencv mat 最大值,数据类型
  3. 大数据SQL日常学习——NVL函数
  4. Caffe 深度学习框架介绍
  5. Ability跳转指定Slice的方法
  6. PHP 基础篇 - PHP 中 DES 加解密详解
  7. leetcode300. 最长递增子序列
  8. service nginx start启动nginx出现Failed to start nginx.service:unit not found
  9. 初识EntityFramework6【转】
  10. rabbitmq 集群保证顺序消费_随笔《RabbitMQ》如何保证消息不被重复消费
  11. yocto rootfs 支持pam
  12. 数据库 ER图 EER图(鸭蹼图) freedgo绘图工具
  13. html5新年拜年模板,关于春节拜年日记模板合集7篇
  14. MDR的进阶版本-GMDR
  15. MIKE水动力笔记8_冷启动与热启动
  16. 06篇 Nacos Client本地缓存及故障转移
  17. 采购是份“好工作”吗?
  18. 分式计算机,计算机网络与分式系统.ppt
  19. 小程序开发系列之基础部分-开发工具
  20. R语言中绘制ROC曲线方法一:ROCR包

热门文章

  1. MySQL自定义函数用法详解-复合结构自定义变量/流程控制
  2. 【Hoxton.SR1版本】Spring Cloud Sleuth分布式请求链路跟踪
  3. SpringMVC结合ajaxfileupload文件无刷新上传
  4. SpaceEmacs Rock Day2 学习笔记
  5. java中class.forName和classLoader加载类的区分
  6. Facebook广告目标摘要
  7. 【mongoDB中级篇②】索引与expain
  8. [UI] 精美UI界面欣赏[4]
  9. 【读史笔记】《晋书·卫玠列传》
  10. python canvas画移动物体_HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动