在这个大数据横行的时代,做数据解决方案的数据工程师们,你们是不是应该为大数据做好准备了呢?摩尔定律始终没有远离时代的发展,改变着你我的世界。
前两天,跟一个资深 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上的文件夹或者文件,因此这里要注意文件夹的存储。
...未完待更
领取专属 10元无门槛券
私享最新 技术干货