简单介绍

  • 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. Spring Cloud 系列之 Gateway 服务网关(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一) 本篇文章讲解 Gateway 网关的多种路由规则.动态路由规则(配合服务发现的路由规则 ...

  2. The Super Powers UVA - 11752

    题目大意:将范围从1~pow(2,64)-1内的super power输出.super power的定义:一个数x至少存在两种x=pow(i,k),(k!=1). 题解: 注意数据范围2的64次方-1 ...

  3. A. Number Theory Problem

    题目大意:计算小于2^n,且满足2^k-1并且是7的倍数的个数 思路:优先打表,数据不大,1e5,然后求个前n项和 #include<bits/stdc++.h> using namesp ...

  4. windows批处理protoc生成C++代码

    1 首先需要生成protoc的可执行文件,具体可以参考  https://www.cnblogs.com/cnxkey/articles/10152646.html 2 将单个protoc文件生成.h ...

  5. web form常用控件

    表单元素一共12个分三大类 文本类<input type="text" />             文本框<input type="password& ...

  6. [php] 简单的实现一个错误接管类

    自己弄的一个错误接管类: <?php //---------------------------------- // Leephp 错误接管类 // 2017-07-06 // Pengchon ...

  7. 【高频 Redis 面试题】Redis 事务是否具备原子性?

    一.Redis 事务的实现原理 一个事务从开始到结束通常会经历以下三个阶段: 1.事务开始 客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑. 服务器会在客户端状态(redisClien ...

  8. 白话理解https

    为什么需要加密? 因为http的内容是明文传输的,传输过程有可能被劫持或被篡改(中间人攻击),如何解决? 当然是加密.最简单的方式就是对称加密(快). 对称机密 就是一个密钥,可以理解为一把钥匙,我们 ...

  9. vue中解决时间在ios上显示NAN的问题

    最近在用vue,遇到倒计时在ios上显示为NAN的问题. 因为做的是倒计时支付,思路是获取服务器时间和下单时间,再转成秒级时间戳做差值. 在网上找到说是ios 不支持例如2018-09-01 10:0 ...

  10. pytorch 中LSTM模型获取最后一层的输出结果,单向或双向

    单向LSTM import torch.nn as nn import torch seq_len = 20 batch_size = 64 embedding_dim = 100 num_embed ...