博主从小对数学和计算机感兴趣,大学一年级在老师的引导下开始接触数学建模,在此期间开始学习运筹学,数学模型,还有一些数学建模的算法。博主就是从这个时候开始接触计算机编程,学习的第一门语言是MATLAB,这可能跟很多程序员不同,因为不是从c语言开始的,所以一直在坑里翻滚。作为井底之蛙,经过大学几年下来的积累,大学也算没有荒废。在闲杂的大学生活,参加过全国大学生数学建模竞赛和美国大学生数学建模竞赛,拿过最好的成绩就是本科组全国二等奖,本来想试一下 ACM 的,结果还是没有勇气往前跨那一步。
在这段痛苦并快乐的日子里,学习了matlab,lingo,spss,python,linux,c,java 。大一上课听高数老师提到过大数据,当时也没太在意,后来开始学习数学建模的时候也经常听到大数据的声音,15年9月份全国数模竞赛结束后真正开始接触大数据,在之后的学习里,完全颠覆了我对大数据的认知。说起大数据,真的有太多太多的话想说,大学的第一个暑假,通过了学校选拔进入 CUMCM 的暑假集训,当时有一次课中,老师说现在的竞赛题目有两类,连续性,离散型,其实说白了一种像物理题,一种像生活中的数学应用题,而离散型给的数据越来越多,处理数据越来越困难,当时老师说这种就是大数据类型的题目,有几十万条数据,让你处理分析,然后安利了一个spss软件,这是我对大数据的第一认识,当时老师还说了有关数据库的一些知识,后来提到说现在是信息时代数据量越来越大,以后大数据肯定会成为热门。(这里给赵教授点个赞,说得没错,不过现在回想,几十万条数据真的小得不能在小了,正常的时间段,淘宝网一个小时的日志估计就超过100万条)
后来因为家里的原因,申请修了个金融专业,老师交代任务,每天要看财经新闻,多看经济类节目,也就是这个偶然的机会在优酷上看到宋鸿兵老师的一个叫鸿观的节目(这里给宋老师点个赞,另外鸿观这个节目很不错,推荐大家看一下,主要讲经济和历史),在一期节目中,那一期名字我还记得,叫互联网金融2.0时代,他介绍了一本书《失控》(这本书是不错的,脑洞打开,推荐大家看一下),其中提到 "
涌现" 这一个词,还有一个很重要的思想,
去中心,分布式,离散化。后来网上搜索资料的时候就开始接触到了 Hadoop 。其中还提到了 "可汗" (可汗学院,良心网站,推荐)这个人,他说过一句话,
一个人的价值=他对社会的贡献/他所获得的回报。就是因为这句话,又因为大学的毕业设计与第二学位的论文写作的结束,时间闲散下来,我决定开始写关于大数据系列的博文,希望能给想进入大数据学习的小白(我也是小白)说一些我遇到过的坑,与对Hadoop的理解,如果有不正确的希望大家指出,一起学习一起进步。也算尽一分力吧 ^_^ 。
好了,说了一大堆废话,现在步入开始步入正题。
about BigData
大数据很高大上?这是很多人一开始对这个名词的理解,说实话博主之前也是这样认为的,但是通过一段时间的学习,博主发现大数据所处理的工作在某些程度上说就像收破烂,说好听一点就是垃圾回收。为什么这样说呢?首先要从数据的来源说起,数据来源渠道很多,网络日志就是其中一个。网络日志在生活层面上看就相当于保安室的来访登记表,来访登记表记录了访客的信息,一段时间后,某些信息会被保留下来,但绝大多数信息都会随着整理而进入垃圾桶。网络日志也一样,它不是要紧的数据,这些日志会像垃圾一样被定期清除。然而,就唯物主义的角度上看,垃圾是可以被回收利用的,所以这些大量的日志信息也是有利用价值的。然而处理这些垃圾数据的方法有很多,运用关系型数据库系统如oracle,mysql等是可以处理这些数据的。但是这样的成本相对较高,用来"回收垃圾"实在是有点浪费资源,所以有了Hadoop等数据处理平台的出现。
上面说大数据是用来处理垃圾,是不是突然就觉得大数据很low了?其实并不然,变废为宝是一件很神奇的事情不是吗?其实数学的魅力也在这里体现出来了,博主认为数学是很能给人带来惊喜的一门知识。在大数据理论出现之前,数学就可以通过一些算法,通过建模算出很多东西。然而大数据的出现无疑是给建模过程增添光彩,用数据说话,不能说完全正确,但也是相对而言最直观最有效的判定或决策的方法。就像你说你行,你应该上985、211,分数就是你的基本判定条件,虽然分数不能代表一切,但这确实是目前能想到最好的评判标准。
然而大数据的作用远不止垃圾回收的作用,举些简单的案例,如天气的预测,我们可以通过使用大量数据进行拟合;在经济学上,股票走势,也是通过对大量数据的处理分析还有一些统计的模型来进行预判。拥有大量的数据,我们可以通过建立时间序列、灰色系统等模型对自然灾害,地震、水灾、旱灾等进行预测。贴近生活点,博主喜欢看NBA,现在很多NBA运动员的各项身体机能或者技术都可以通过传感器把这些数据记录下来,然后通过对这些数据的处理给运动员一些合理的建议,使运动员更加了解自己,从而提升自己的竞技水平。
未来是大数据的时代。
about Hadoop
Hadoop 是分布式文件系统,其核心是 HDFS 与 MapReduce。
说到分布式,分布式是一个开脑洞级别的思想(博主语文水平不是很好,不知要怎样表达博主内心对分布式思想的膜拜)。在互联网时代,分布式的思想是极其重要的。在这之前,举例来说,我们在做机器人的时候,总觉得机器人要像人一个有个大脑,也就是一个CPU,用这个来控制机器人的眼睛,嘴巴,耳朵,双手与腿。但是后来我们发现,这样编程,用到的算法实在是太复杂了,对CPU的要求也极高。而且做出来的机器人,略显笨拙,走起路来都不自然。但是后来,爬虫类机器人的出现,改变了大家的看法,就比如一个像蜘蛛一样6条腿的机器人,然后我们把传感器分别装到其六条腿上,每条腿就是一个系统,各自进行简单的运算处理,遇到障碍物就躲避。就这样一个简单的分布式的实现思想,使这类机器人变得相当的灵活,想往前就往前,想往左走就不往右倾斜。而且运算量相比一个大脑的机器人来说是相当的小。所以分布式是一个很创新的思想,可以运用到很多层面。
Hadoop 也是一样,分布式文件系统。这思想很实在,就如牛拉重物,一个物体很重,一头普通的牛拉不动,我们想到的方法不是找一头更强壮的牛来拉,而是多叫头牛去拉。对计算机来说,把东西分开存储、运算,这会大大减轻内存的负担,降低CPU 负载。
学习 Hadoop 需要掌握的基础知识:
Linux 基础,Hadoop是搭建在这个平台上的,Linux 操作越熟练,搭建 Hadoop 速度越快
Java 基础,不要问学多少才够用,多多益善,Java 学得越好,Hadoop 就学得越轻松。Hadoop 就是以 Java 语言写就的。
计算机基础,作为了解吧,如果要深入学习的话,计算机基础必须扎实。
数学、统计学基础,这个见仁见智吧,主要看往哪方向发展。
hadoop 的历史我就不说了,大家有兴趣可以可以看 hadoop 权威指南,目前出到第四版,不过第四版没有中文版, 中文版只有第三版,有兴趣看电子版的可以评论留下邮箱,博主送福利。hadoop 发行版本有1.x,2.x,另外主流的有 apache 版和 CDH 版的,两个版本的安装配置大相径庭,CDH 版是 Cloundera 公司发布的,兼容性比较好,但是一些服务是收费的。
apache 版下载地址:
CDH 版下载地址:
Hadoop 安装与配置
Hadoop 以Java 语言写就,因而需要在本地计算机上安装 Java 6 以上版本,Hadoop 能运行在 Unix 或 Window 平台上,不过 Windows 仅限于作为开发平台,并需要借助Cygwin。如果计划伪分布式模式运行 Hadoop ,则在安装 Cygwin 的过程中必须包含 openssh 包。所以学习这个需要有一定的 java 基础,后面有时间博主会更新一些 hadoop 中经常用到的一些 java 的相关知识,基础语法的话,大家可以去网易云课堂看一下,如果之前学过 c 的话,java 应该很快就可以把基本语法搞定。
为了更好的体验,博主建议在 linux 平台下搭建 Hadoop。
hadoop 有三种模式:
1. 单机模式(这个可以忽略);
2.
伪分布式:虽然叫伪分布式,但实际上就是分布式了,内部是用集群的方式来运作的,虽然集群里只有一台计算机。专门用于学习和测试。举个例子说就像虚拟机,虽然是虚拟的,但是里面运行操作都跟的电脑一样。
3.
完全分布式:伪分布式测试通过后就可以配完全分布式了,也就是 hadoop 集群的搭建,这个需要多台电脑,用于实际应用中。
配置伪分布式
配置伪分布式,博主归纳为两个个步骤,系统环境配置,软件安装与环境配置。
1. 系统环境配置
1. 把网卡IP设置为静态(NAT模式)
点击编辑 >> 虚拟网络编辑器 >> NAT 设置 查看子网IP、子网掩码、网关
2. 关闭Linux防火墙(iptables)和安全子系统(selinux)
1 [root@floyd ~]# service iptables status 2 [root@floyd ~]# service iptables stop # 关闭防火墙服务 3 [root@floyd ~]# chkconfig iptables off # 设置为开机不启动 4 [root@floyd ~]# chkconfig --list # 列出所有的系统服务 5 [root@floyd ~]# chkconfig --list | grep iptables
默认的情况下,防火墙之后开启拦截22号端口,会影响hadoop集群的通信,为了方便我们直接关闭防火墙,也可以选择只开放相应的端口。
a. 关闭防火墙
SELINUX=disabled # 把enforciong改为disabled
3. 设置主机映射
[root@floyd ~]# vi /etc/hosts
192.168.11.120 为ip地址 floyd.domain 为主机名
C:\Windows\System32\drivers\etc\hosts 在hosts文件最后一行加入ip与主机名
##
NAT(Network Address Translation)网络地址转换,它是一个IETF标准,允许一个整体以一个公用IP地址出现在Internet上。
顾名思义,它是一种把内部私有网络地址翻译成合法网络IP地址的技术。简单的说,NAT就是在局域网内部网络中使用内部地址,
而当内部节点要与外部网络进行通讯时,就在网关处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,
这一功能很好地解决了公共IP地址紧缺的问题。通过这种方法,只申请一个合法IP地址,就可以把整个局域网中的计算机接入Internet。
内部网计算机用户通常不会意识到NAT的存在。NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。其中,
静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。
下一篇博主会发布jdk、 Hadoop、 HDFS、 YARN 的安装与配置的详细方法
jdk & hadoop 下载地址
百度网盘:链接:http://pan.baidu.com/s/1i4XXlUt 密码:wun4
写作时间:
20170513-20170516:Floyd