HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心,HDFS在集群上实现了分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理,HDFS
在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发,跟踪,执行等工作,并收集结果,二者相互作用,完成了
Hadoop分布式集群的主要任务
对于SSH无密码登录,网络上的文章大多互相转载,都认为需要Master和Slave之间需要互相配置无密码,其实并不是这样的。通过验证后准确的总结下面这句话
在实际应用中,只需要配置从Master到所有的Slave发现SSH连接的时候不需要密码就可以了,但是这样就只能在Master的主机上启动或者关闭hadoop服务
因为在执行start dfs 或者start yarn的实际过程中,hadoop框架会查找对应执行主机上的masters文件以及slaves的文件,分别SSH到以上文件中指明的主机中执行对应的命令
所以在实际测试中,在Master执行start-dfs的时候,会在Master上启动namenode,而在Slave上启动nodenode,并不是Master通过RPC之类的方式进行的启动,而是Master
通过SSH无密码登录到Slave上,进行的对应命令调用。
通过测试记录以下知识点
1)在配置SSH无密码登录的时候,实际上是只需要配置master能ssh到slave即可,这样就只能在master上启动整个hdfs环境,也就说如果在某个slave能够ssh到其他所有的主
机,包括master和slave,这样就可以在那台slave上执行start-dfs去启动整个hdfs,所以说一般情况下,如果可以在master上进行操作,只需要配置单向即可
2)在网上转载的文章上很多都说明需要在etc/hadoop下配置masters文件和slaves文件,在实际操作的时候,可以验证是不需要masters文件的,应该是需要slaves文件的,因
为启动主机并不是根据masters文件中的host去启动namenode,而是通过core-site.xml中配置的host去找到master,再去启动整个环境的
3) 在启动yarn服务的时候,首先发现是只能在启动主机上运行resourcemanage的,也就是jobstack。这就说明了并不一定要在namenode上运行。其次发现并不能在启动主
机上去指定其他主机启动resourcemanage,在测试的时候,在slave上的yarn-site.xml上指定master的host地址,在启动的时候会提示无法绑定地址,导致resourcemanage无
法正常运行,而改为启动主机host则可,这就说明,启动yarn应该不是走的SSH登录的方式,猜测应该是只能绑定本机的端口启动resourcemanage
4) 在启动hdfs服务的时候,启动主机会根据core-site.xml中配置的地址去ssh到指定master上启动,这一步是没问题的,此时在master主机上的core-site.xml的配置的
fs.default.name地址必须是本机地址,其实也就是在整个集群中的配置文件在实际运维中都是相同的,所以不会存在问题,在测试的过程中修改了上步描述的在master主机上的
core-site.xml的配置,会跟上面的3点的错误信息一样,也是无法绑定地址,这也是很明显的,因为只能绑定到本机的机制。
在实际使用的时候,还是建议启动hdfs和yarn都在master上进行操作,而且保证所有主机上的配置文件保持一致,这也是实际运维过程中的正确做法,这样就可以避免配置文
件不一致导致的无法启动集群的问题,上述测试主要是为了验证一些不清楚的地方,在后续的测试不再考虑以上的情况
Apache Hive数据仓库软件提供对存储在分布式中的大型数据集的查询和管理,本身是建立在Apache Hadoop之上,主要提供以下功能:
1) 提供了一系列的工具,可用来对数据进行提取,转化和加载
2) 是一种可以存储,查询和分析存储在HDFS或者HBase中的大规模数据的机制
3) 查询是通过MapReduce来完成的,并不是所有的查询都需要MapReduce来完成,比如select * from XXX就不需要
Hive在hadoop生态圈中属于数据仓库的角色,能够管理hadoop涨的数据,同时可以查询hadoop中的数据
本质上说,hive是一个SQL解析引擎,Hive可以将SQL查询转换为MapReduce中的job来运行
Hive的三种模式
1. 内嵌模式,特点是hive服务和metastore服务运行在同一个进程中,hive默认的数据库使用derby,这种模式下derby服务也运行在该进程中,该模式无需特殊配置
2. 本地模式,特点是hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以在同一台机器上,也可以在远程机器上,该模式只需要将hive-site.xml中的
ConnectionURL指向mysql,并配置好驱动名,数据库连接账号。
3. 远程模式,特点是hive服务和metastore服务在不同的进程内,可能是不同的机器,该模式需要将hive.metastore.local设置为false,并将hive.metastore.uris设置为metastore 服务器的URI,如有多个metastore服务器,URI之间用逗号分隔,metastore服务器URI的格式为thrift://127.0.0.1:10000
<property>
<name>hive.metastore.uris</name>
<value>thrift://127.0.0.1:9083</value>
</property>
整理来说,其实仅仅的连接远程mysql并不能称为远程模式,是否属于远程模式指的是metastore和hive服务是否在同一个进程内