简单介绍

  • Hadoop HA 概述

    HA(High Available) —— 高可用,是保证业务连续性的有效解决方案。一般有两个或两个以上的节点,分为活动节点(Active)及备用节点(Standby)。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。

    Hadoop1.X版本,NN是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法使用。为了解决这个问题,出现了一堆针对HDFS HA的解决方案(如:Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quorum Journal Manager, BackupNode等)。

    在HA具体实现方法不同情况下,HA框架的流程是一致的, 不一致的就是如何存储、管理、同步edits编辑日志文件。

    在Active NN和Standby NN之间要有个共享的存储日志的地方,Active NN把edit Log写到这个共享的存储日志的地方,Standby NN去读取日志然后执行,这样Active和Standby NN内存中的HDFS元数据保持着同步。一旦发生主从切换Standby NN可以尽快接管Active NN的工作。

  • 集群搭建规划


集群搭建

  • 第一步:停止服务

    要停止hadoop集群的所有服务,包括HDFS、yarn、impala、hive、oozie、hue等

    # 停止oozie
    cd /export/servers/oozie-4.1.0-cdh5.14.0
    bin/oozied.sh stop
    hue	impala	hive在进程中杀死即可
    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/stop-dfs.sh
    sbin/stop-yarn.sh
    sbin/mr-jobhistory-daemon.sh stop historyserver
  • 第二步:启动所有节点的ZooKeeper

    cd /export/servers/zookeeper-3.4.5-cdh5.14.0
    bin/zkServer.sh start
  • 第三步:更改配置文件

    core-site.xml

    <!--
    <property>
    <name>fs.default.name</name>
    <value>hdfs://192.168.52.100:8020</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/tempDatas</value>
    </property> <property>
    <name>io.file.buffer.size</name>
    <value>4096</value>
    </property> <property>
    <name>fs.trash.interval</name>
    <value>10080</value>
    </property>
    --> <property>
    <name>ha.zookeeper.quorum</name>
    <value>node01.hadoop.com:2181,node02.hadoop.com:2181,node03.hadoop.com:2181</value>
    </property> <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hann</value>
    </property>
    <!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
    <property>
    <name>io.file.buffer.size</name>
    <value>4096</value>
    </property> <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/tempDatas</value>
    </property> <property>
    <name>fs.trash.interval</name>
    <value>10080</value>
    </property> <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
    </property>
    <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
    </property>

    hdfs-site.xml

    <!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割   -->
    <!-- 集群动态上下线
    <property>
    <name>dfs.hosts</name>
    <value>/export/servers/hadoop-2.7.4/etc/hadoop/accept_host</value>
    </property> <property>
    <name>dfs.hosts.exclude</name>
    <value>/export/servers/hadoop-2.7.4/etc/hadoop/deny_host</value>
    </property>
    --> <!--
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node01:50090</value>
    </property> <property>
    <name>dfs.namenode.http-address</name>
    <value>node01:50070</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>
    </property> <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas</value>
    </property> <property>
    <name>dfs.namenode.edits.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>
    </property> <property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name</value>
    </property>
    <property>
    <name>dfs.namenode.checkpoint.edits.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits</value>
    </property> <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property> <property>
    <name>dfs.permissions</name>
    <value>false</value>
    </property> <property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    </property> <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property> <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.domain.socket.path</name>
    <value>/var/run/hdfs-sockets/dn</value>
    </property>
    <property>
    <name>dfs.client.file-block-storage-locations.timeout.millis</name>
    <value>10000</value>
    </property>
    <property>
    <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
    <value>true</value>
    </property> <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property> -->
    <property>
    <name>dfs.nameservices</name>
    <value>hann</value>
    </property> <property>
    <name>dfs.ha.namenodes.hann</name>
    <value>nn1,nn2</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.hann.nn1</name>
    <value>node01.hadoop.com:8020</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.hann.nn2</name>
    <value>node02.hadoop.com:8020</value>
    </property> <property>
    <name>dfs.namenode.servicerpc-address.hann.nn1</name>
    <value>node01.hadoop.com:8022</value>
    </property>
    <property>
    <name>dfs.namenode.servicerpc-address.hann.nn2</name>
    <value>node02.hadoop.com:8022</value>
    </property> <property>
    <name>dfs.namenode.http-address.hann.nn1</name>
    <value>node01.hadoop.com:50070</value>
    </property>
    <property>
    <name>dfs.namenode.http-address.hann.nn2</name>
    <value>node02.hadoop.com:50070</value>
    </property> <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node01.hadoop.com:8485;node02.hadoop.com:8485;node03.hadoop.com:8485/hann</value>
    </property> <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/jn</value>
    </property> <property>
    <name>dfs.client.failover.proxy.provider.hann</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property> <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    </property> <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
    </property> <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value> </property>
    <property>
    <name>dfs.namenode.edits.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>
    </property> <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas</value>
    </property> <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property> <property>
    <name>dfs.permissions</name>
    <value>false</value>
    </property> <property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    </property> <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property> <property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.domain.socket.path</name>
    <value>/var/run/hdfs-sockets/dn</value>
    </property>
    <property>
    <name>dfs.client.file-block-storage-locations.timeout.millis</name>
    <value>10000</value>
    </property>
    <property>
    <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
    <value>true</value>
    </property> <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property>

    mapred-site.xml

    <!--
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapreduce.job.ubertask.enable</name>
    <value>true</value>
    </property> <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node01:10020</value>
    </property> <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node01:19888</value>
    </property>
    -->
    <!--
    <property>
    <name>mapreduce.map.output.compress</name>
    <value>true</value>
    </property>
    <property>
    <name>mapreduce.map.output.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
    </property> <property>
    <name>mapreduce.output.fileoutputformat.compress</name>
    <value>true</value>
    </property> <property>
    <name>mapreduce.output.fileoutputformat.compress.type</name>
    <value>RECORD</value>
    </property> <property>
    <name>mapreduce.output.fileoutputformat.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
    </property>
    -->
    <!--指定运行mapreduce的环境是yarn -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <!-- MapReduce JobHistory Server IPC host:port -->
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node03:10020</value>
    </property>
    <!-- MapReduce JobHistory Server Web UI host:port -->
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node03:19888</value>
    </property>
    <!-- The directory where MapReduce stores control files.默认 ${hadoop.tmp.dir}/mapred/system -->
    <property>
    <name>mapreduce.jobtracker.system.dir</name>
    <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/jobtracker</value>
    </property>
    <!-- The amount of memory to request from the scheduler for each map task. 默认 1024-->
    <property>
    <name>mapreduce.map.memory.mb</name>
    <value>1024</value>
    </property>
    <!-- <property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx1024m</value>
    </property> -->
    <!-- The amount of memory to request from the scheduler for each reduce task. 默认 1024-->
    <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>1024</value>
    </property>
    <!-- <property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx2048m</value>
    </property> -->
    <!-- 用于存储文件的缓存内存的总数量,以兆字节为单位。默认情况下,分配给每个合并流1MB,给个合并流应该寻求最小化。默认值100-->
    <property>
    <name>mapreduce.task.io.sort.mb</name>
    <value>100</value>
    </property> <!-- <property>
    <name>mapreduce.jobtracker.handler.count</name>
    <value>25</value>
    </property>-->
    <!-- 整理文件时用于合并的流的数量。这决定了打开的文件句柄的数量。默认值10-->
    <property>
    <name>mapreduce.task.io.sort.factor</name>
    <value>10</value>
    </property>
    <!-- 默认的并行传输量由reduce在copy(shuffle)阶段。默认值5-->
    <property>
    <name>mapreduce.reduce.shuffle.parallelcopies</name>
    <value>25</value>
    </property>
    <property>
    <name>yarn.app.mapreduce.am.command-opts</name>
    <value>-Xmx1024m</value>
    </property>
    <!-- MR AppMaster所需的内存总量。默认值1536-->
    <property>
    <name>yarn.app.mapreduce.am.resource.mb</name>
    <value>1536</value>
    </property>
    <!-- MapReduce存储中间数据文件的本地目录。目录不存在则被忽略。默认值${hadoop.tmp.dir}/mapred/local-->
    <property>
    <name>mapreduce.cluster.local.dir</name>
    <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/mapreduce/local</value>
    </property>

    yarn-site.xml

    <!--
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node01</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property> <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property>
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
    </property>
    --> <!-- Site specific YARN configuration properties -->
    <!-- 是否启用日志聚合.应用程序完成后,日志汇总收集每个容器的日志,这些日志移动到文件系统,例如HDFS. -->
    <!-- 用户可以通过配置"yarn.nodemanager.remote-app-log-dir"、"yarn.nodemanager.remote-app-log-dir-suffix"来确定日志移动到的位置 -->
    <!-- 用户可以通过应用程序时间服务器访问日志 --> <!-- 启用日志聚合功能,应用程序完成后,收集各个节点的日志到一起便于查看 -->
    <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property> <!--开启resource manager HA,默认为false-->
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    <!-- 集群的Id,使用该值确保RM不会做为其它集群的active -->
    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>mycluster</value>
    </property>
    <!--配置resource manager 命名-->
    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>
    <!-- 配置第一台机器的resourceManager -->
    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>node03.hadoop.com</value>
    </property>
    <!-- 配置第二台机器的resourceManager -->
    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>node02.hadoop.com</value>
    </property> <!-- 配置第一台机器的resourceManager通信地址 -->
    <property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>node03.hadoop.com:8032</value>
    </property>
    <property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>node03.hadoop.com:8030</value>
    </property>
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
    <value>node03.hadoop.com:8031</value>
    </property>
    <property>
    <name>yarn.resourcemanager.admin.address.rm1</name>
    <value>node03.hadoop.com:8033</value>
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>node03.hadoop.com:8088</value>
    </property> <!-- 配置第二台机器的resourceManager通信地址 -->
    <property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>node02.hadoop.com:8032</value>
    </property>
    <property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>node02.hadoop.com:8030</value>
    </property>
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
    <value>node02.hadoop.com:8031</value>
    </property>
    <property>
    <name>yarn.resourcemanager.admin.address.rm2</name>
    <value>node02.hadoop.com:8033</value>
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>node02.hadoop.com:8088</value>
    </property>
    <!--开启resourcemanager自动恢复功能-->
    <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
    </property>
    <!--在node3上配置rm1,在node2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改,其他机器上不配置此项-->
    <property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>
    <description>If we want to launch more than one RM in single node, we need this configuration</description>
    </property> <!--用于持久存储的类。尝试开启-->
    <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>node01.hadoop.com:2181,node02.hadoop.com:2181,node03.hadoop.com:2181</value>
    <description>For multiple zk services, separate them with comma</description>
    </property>
    <!--开启resourcemanager故障自动切换,指定机器-->
    <property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
    <description>Enable automatic failover; By default, it is enabled only when HA is enabled.</description>
    </property>
    <property>
    <name>yarn.client.failover-proxy-provider</name>
    <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
    </property>
    <!-- 允许分配给一个任务最大的CPU核数,默认是8 -->
    <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>4</value>
    </property>
    <!-- 每个节点可用内存,单位MB -->
    <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>512</value>
    </property>
    <!-- 单个任务可申请最少内存,默认1024MB -->
    <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>512</value>
    </property>
    <!-- 单个任务可申请最大内存,默认8192MB -->
    <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>512</value>
    </property>
    <!--多长时间聚合删除一次日志 此处-->
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>2592000</value><!--30 day-->
    </property>
    <!--时间在几秒钟内保留用户日志。只适用于如果日志聚合是禁用的-->
    <property>
    <name>yarn.nodemanager.log.retain-seconds</name>
    <value>604800</value><!--7 day-->
    </property>
    <!--指定文件压缩类型用于压缩汇总日志-->
    <property>
    <name>yarn.nodemanager.log-aggregation.compression-type</name>
    <value>gz</value>
    </property>
    <!-- nodemanager本地文件存储目录-->
    <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/yarn/local</value>
    </property>
    <!-- resourceManager 保存最大的任务完成个数 -->
    <property>
    <name>yarn.resourcemanager.max-completed-applications</name>
    <value>1000</value>
    </property>
    <!-- 逗号隔开的服务列表,列表名称应该只包含a-zA-Z0-9_,不能以数字开始-->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property> <!--rm失联后重新链接的时间-->
    <property>
    <name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
    </property>

    把这四个发送到node02,node03,node02的yarn-site.xml要把yarn.resourcemanager.ha.id的值修改为rm2

    scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml node02:$PWD
    scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml node03:$PWD
  • 第四步:启动服务

    1.在node01初始化zookeeper

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    bin/hdfs zkfc -formatZK

    2.启动journalNode,三台机器都要执行

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/hadoop-daemon.sh start journalnode

    3.初始化journalNode在node01执行即可

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    bin/hdfs namenode -initializeSharedEdits -force

    4.在node01启动NameNode

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/hadoop-daemon.sh start namenode

    5.在node02启动Namenode

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    bin/hdfs namenode -bootstrapStandby
    sbin/hadoop-daemon.sh start namenode

    6.在node01启动所有节点的datanode

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/hadoop-daemons.sh start datanode

    7.在node01和node02启动zkfc

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/hadoop-daemon.sh start zkfc

    8.在node02和node03启动yarn

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/start-yarn.sh

    8.在node03启动jobhistoryserver

    cd /export/servers/hadoop-2.6.0-cdh5.14.0
    sbin/mr-jobhistory-daemon.sh start historyserver

【Hadoop离线基础总结】Hadoop High Availability\Hadoop基础环境增强的更多相关文章

  1. 【Hadoop离线基础总结】oozie的安装部署与使用

    目录 简单介绍 概述 架构 安装部署 1.修改core-site.xml 2.上传oozie的安装包并解压 3.解压hadooplibs到与oozie平行的目录 4.创建libext目录,并拷贝依赖包 ...

  2. 【Hadoop离线基础总结】Hue的简单介绍和安装部署

    目录 Hue的简单介绍 概述 核心功能 安装部署 下载Hue的压缩包并上传到linux解压 编译安装启动 启动Hue进程 hue与其他框架的集成 Hue与Hadoop集成 Hue与Hive集成 Hue ...

  3. 【Hadoop离线基础总结】impala简单介绍及安装部署

    目录 impala的简单介绍 概述 优点 缺点 impala和Hive的关系 impala如何和CDH一起工作 impala的架构及查询计划 impala/hive/spark 对比 impala的安 ...

  4. 【Hadoop离线基础总结】流量日志分析网站整体架构模块开发

    目录 数据仓库设计 维度建模概述 维度建模的三种模式 本项目中数据仓库的设计 ETL开发 创建ODS层数据表 导入ODS层数据 生成ODS层明细宽表 统计分析开发 流量分析 受访分析 访客visit分 ...

  5. 【Hadoop离线基础总结】Sqoop常用命令及参数

    目录 常用命令 常用公用参数 公用参数:数据库连接 公用参数:import 公用参数:export 公用参数:hive 常用命令&参数 从关系表导入--import 导出到关系表--expor ...

  6. 【Hadoop离线基础总结】Hive调优手段

    Hive调优手段 最常用的调优手段 Fetch抓取 MapJoin 分区裁剪 列裁剪 控制map个数以及reduce个数 JVM重用 数据压缩 Fetch的抓取 出现原因 Hive中对某些情况的查询不 ...

  7. 【Hadoop离线基础总结】Hue与Hadoop集成

    目录 1.更改所有hadoop节点的core-site.xml配置 2.更改所有hadoop节点的hdfs-site.xml 3.重启hadoop集群 4.停止hue的服务,并继续配置hue.ini ...

  8. 【Hadoop离线基础总结】HDFS入门介绍

    HDFS入门介绍 概述 HDFS全称为Hadoop Distribute File System,也就是Hadoop分布式文件系统,是Hadoop的核心组件之一. 分布式文件系统是横跨在多台计算机上的 ...

  9. Ubuntu14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]

    目录 [TOC] 1.CDH介绍 1.1.什么是CDH和CM? CDH一个对Apache Hadoop的集成环境的封装,可以使用Cloudera Manager进行自动化安装. Cloudera-Ma ...

  10. [Hadoop in Action] 第4章 编写MapReduce基础程序

    基于hadoop的专利数据处理示例 MapReduce程序框架 用于计数统计的MapReduce基础程序 支持用脚本语言编写MapReduce程序的hadoop流式API 用于提升性能的Combine ...

随机推荐

  1. Vm安装虚拟机并使用net模式连接外网

    Vm安装虚拟机并使用net模式连接外网 最近想搭建一个maven私服和阿波罗配置中心一切准备就绪时 发现本地vm虚拟机无法连接外网,嗯 ~ ~ ,一句cnm不由从嘴里崩了出来.没办法,只能配置一下了接 ...

  2. string 中的getline

    1 getline 读入string库中的字符串 string a; getline(cin,a);  这样的读入要比任何一种读入字符串都有要快 2 char a[N]; cin.getline(a, ...

  3. C++学习--编译优化

    常量折叠 把常量表达式的值求出来作为常量嵌在最终生成的代码中. 疑问:对于一个很复杂的常量表达式,编译器会算出结果再编译吗?亦或者是把这个表达式完全翻译成机器码,最终留给程序去解决? 分情况: 涉及的 ...

  4. Django中HttpRequest常用参数介绍

    HttpRequest对象常用参数介绍,以及前端不同请求方式(http方法/Content-Type类型)对应的参数获取方式. 一.HttpRequest对象 django请求对象的详细参数以及实现方 ...

  5. Linux命令:chown

    说明: 将指定文件的拥有者改为指定的用户或组. 语法: chown [-cfhvR] [--help] [--version] user[:group] file... 参数: user : 新的文件 ...

  6. iview使用之怎样通过render函数在table组件表头添加图标及判断多个状态

    在实际项目开发中,我们经常会用到各种各样的表格,比如在表格中填加下拉菜单,按钮,图标及可以根据状态显示对应文字等等,因为这段时间一直在做后台管理系统,所以表格用的就比较多,当然UI组件库我用的是ivi ...

  7. Centos8安装Docker提示:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed

    Centos8安装Docker提示:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but ...

  8. 报错:require_once cannot allocate memory----php,以前自己弄的稍微有点特殊的开发环境

    最近出现过一个问题,值得记录 类似于这样的报错的问题: Warning: require_once(/www/app/somecomponent.php): failed to open stream ...

  9. 架构设计 | 分布式业务系统中,全局ID生成策略

    本文源码:GitHub·点这里 || GitEE·点这里 一.全局ID简介 在实际的开发中,几乎所有的业务场景产生的数据,都需要一个唯一ID作为核心标识,用来流程化管理.比如常见的: 订单:order ...

  10. PHP 获取前两页的url地址

    通过隐藏表单控件 <input type="hidden" name="prevurl" value="<?php echo $_SERV ...