首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hadoop 实验-Mac 搭建篇

在这个大数据横行的时代,做数据解决方案的数据工程师们,你们是不是应该为大数据做好准备了呢?摩尔定律始终没有远离时代的发展,改变着你我的世界。

前两天,跟一个资深 CRM 开发顾问聊了一聊,谈到前端,谈到数据库技术,也谈到了整个数据行业的发展。

前端的变化,日新月异,想要追赶主流,却往往难以 ” 望其项背 ”。放在很长的一段时间维度来看,今天你会的Angular 1,2,3,4不旧就会被 React , Node.js 给颠覆,你看 JQuery 就不是被 Angular 完败了么!

而数据库技术生命周期却要实打实的,半衰很长一段时间,发展往往比前端技术缓慢一些。但如今看来,数据领域也是日新月异,曾经以为的 Oracle, 一时的霸主,认为只要掌握了它,就能走向人生巅峰,而如今的 Oracle ACM 却已经风光不再,甚至 3 年就能拿到证书了,导致含金量未必被企业认可。

而新起的 NoSQL, Hadoop, 以及围绕着Hadoop 打造的上下游产品,HBase, Hive, Impala等,早已在互联网领域蚕食了大片江山,去 IOE 的呼声,日渐叫嚣。

所谓技不压身,多学点本领傍身,总为自己多一条路可以走!

上一次,我简单在本机玩了一下 Hadoop 的搭建,实验记录还在下面。

Hadoop 的 PseudoDistributed 搭建实验记录:

https://note.youdao.com/share/?id=5946c38c3da3a1b1ffba23e66e4577ea&type=note#/

今天我在咖啡馆,花了一个下午,在我的 Mac 笔记本又重新搭建了一下 hadoop, 更加详细的记录了中间可能会遇到的问题与概念:

首先是Java JVM的故事:

在Mac上,我的Java JVM 是安装在这个地址:

/library/java/javavirtualmachines/jdk1.8.0_101.jdk/contents/home

目录中虽然显式的是 JDK1.8, 但是对 JDK, JRE 具体怎么去分辨你真的了解了么?

整体上,JDK包含了JRE, JRE仅仅是 java runtime environment, 包含了运行 Java 程序所需要的程序库。辨别两者的本质,JDK可能还有一系列插件,示例。最重要的是JDK目录下不仅仅包含了JRE,在其bin目录下还有javac即编译java class的编译器。

接着是Hadoop四大件的问题:

1. hdfs: 这是hadoop分布式存储系统。

打开分布式存储进程:

$HADOOP_HOME/sbin/start-dfs.sh

格式化Name Node:此时的hadoop还只是提供了一个裸设备而已,还不能往里面存储数据文件。接着需要格式化裸设备:

$HADOOP_HOME/bin/dfs namenode -format

这个时候,Naming Image 和 Edit Log 开始准备接收文件操作了。

此时访问http://localhost:50070/就可以看到 hadoop hdfs的整个面貌.

对 hdfs 提几个发散性的问题:

1hdfs的访问权限设置:

在centos下,没有遇到用户权限(访问hdfs)的问题,直接用当前账户就可以读和写hdfs。而Mac下就需要了。当然这只是我的理解问题,centos可能直接帮我们做好用户映射了,而Mac需要自己来配置。但是无论如何这是要从表象看到内里的问题,到底我们对hdfs的权限应该怎么分配?

hdfs默认可供启动hadoop进程用户使用的hdfs文件资源,是/user/用户名。

启动hadoop进程是由本机的一个专属用户执行的。使用whoami得到本机登录用户名,在hadoop hdfs中创建一个文件夹,以whoami得到的用户名比如lewis,来命名该用户的默认操作空间:/user/lewis。这个文件夹/user/lewis就是该用户lewis在hdfs中可以使用的文件资源空间了

2命令hdfs namenode -format 与 start-dfs.sh 的区别及启动顺序:

hdfs namenode -format 的作用,是启动一个作为namenode的进程,将某一个node作为name node,并且在这个node的本机文件夹下,建立一个naming format 文件以及对应的 edit log文件。这样一个name node就正式确立了。

start-dfs.sh 执行之后,基于本机的name node,来扩展data node. 作用是启用了一个name node的进程来控制整个 hdfs 的文件系统。

所以很显然,先后顺序是先 name node format, 再 start-dfs.sh. 当然如果name node 已经被format 过了,那么直接运行start-dfs.sh即可。如果不先执行name node format, 那么start-dfs.sh虽然也能运行,但是我们的http://localhost:50070就不能连上任何有效的node manager.原因很简单,就是没有name node进程。

要验证整个过程,我们需要将name node重新添加或者reformat. 再去/tmp/用户名/dfs下面检查。

这是在namenode -format执行过后截图下来的

是执行start-dfs.sh后,截图下来的:

这段命令脚本执行后,明显有了secondary name node,尽管文件夹里面没有文件,但已经说明已经启动了hdfs进程。

当然也可以反过来,先执行start-dfs.sh, 你会发现,只有NameSecondary文件夹,没有name 文件夹,所以不能访问http://localhost:50070, 也就是说你的hdfs群龙无首。

3 测试用例:hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar grep input output 'dfs[a-z.]+'

在hadoop命令下,所有的指向都是hdfs上的文件夹或者文件,因此这里要注意文件夹的存储。

...未完待更

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180114G05M9O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券