华为云用户手册

  • 创建、查看和删除数据库 使用CREATE DATABASE语句创建数据库。 1 CREATE DATABASE test_db ENCODING 'UTF8' template = template0; 使用\l元命令查看数据库系统的数据库列表。 1 \l 通过系统表PG_DATABASE查询数据库列表。 1 SELECT datname FROM pg_database; 使用DROP DATABASE语句删除数据库。 1 DROP DATABASE test_db;
  • 创建、查看、修改和删除表 使用CREATE TABLE语句创建表。 1 CREATE TABLE customer_t1(id INT, name CHAR(40),age TINYINT); 使用PG_GET_TABLEDEF()函数查看建表语句。 1 SELECT * FROM PG_GET_TABLEDEF('customer_t1'); 使用ALTER TABLE语句修改表。 增加列: 1 ALTER TABLE customer_t1 ADD (address VARCHAR(100)); 删除列: 1 ALTER TABLE customer_t1 DROP COLUMN address; 修改字段类型: 1 ALTER TABLE customer_t1 MODIFY age INTEGER NOT NULL; 使用DROP TABLE语句删除表。 1 DROP TABLE customer_t1;
  • 增删改查表数据 使用INSERT INTO语句插入表数据。 1 INSERT INTO customer_t1 VALUES(1001,'user1',22); 使用SELECT语句查询表数据。 1 SELECT * FROM customer_t1; 使用UPDATE更新表数据。 1 UPDATE customer_t1 SET id = 1009 WHERE id = '1001'; 使用DELETE删除表数据。 1 DELETE FROM customer_t1 WHERE id = '1009';
  • 增删改查表数据 使用INSERT INTO语句插入表数据。 1 INSERT INTO customer_t1 VALUES(1001,'user1',22); 使用SELECT语句查询表数据。 1 SELECT * FROM customer_t1; 使用UPDATE更新表数据。 1 UPDATE customer_t1 SET id = 1009 WHERE id = '1001'; 使用DELETE删除表数据。 1 DELETE FROM customer_t1 WHERE id = '1009';
  • 创建、查看、修改和删除表 使用CREATE TABLE语句创建表。 1 CREATE TABLE customer_t1(id INT, name CHAR(40),age TINYINT); 使用PG_GET_TABLEDEF()函数查看建表语句。 1 SELECT * FROM PG_GET_TABLEDEF('customer_t1'); 使用ALTER TABLE语句修改表。 增加列: 1 ALTER TABLE customer_t1 ADD (address VARCHAR(100)); 删除列: 1 ALTER TABLE customer_t1 DROP COLUMN address; 修改字段类型: 1 ALTER TABLE customer_t1 MODIFY age INTEGER NOT NULL; 使用DROP TABLE语句删除表。 1 DROP TABLE customer_t1;
  • 创建、查看和删除数据库 使用CREATE DATABASE语句创建数据库。 1 CREATE DATABASE test_db ENCODING 'UTF8' template = template0; 使用\l元命令查看数据库系统的数据库列表。 1 \l 通过系统表PG_DATABASE查询数据库列表。 1 SELECT datname FROM pg_database; 使用DROP DATABASE语句删除数据库。 1 DROP DATABASE test_db;
  • 操作步骤 登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果集群为安全模式,执行distcp命令的用户所属的用户组必须为supergroup组,且执行以下命令进行用户认证。普通模式集群无需执行用户认证。 kinit 组件业务用户 直接执行distcp命令。例如: hadoop distcp hdfs://hacluster/source hdfs://hacluster/target
  • 配置描述 进入Mapreduce服务参数“全部配置”界面,在搜索框中输入参数名称。具体操作请参考修改集群服务配置参数章节。 表1 参数描述 参数 描述 默认值 mapreduce.cluster.acls.enabled 是否开启对Job History Server权限控制的开关。 true mapreduce.cluster.administrators 用于指定MapReduce集群管理员列表,可以配置用户和用户组,用户或者用户组之间用逗号间隔,用户和用户组之间用空格间隔,举例:userA,userB groupA,groupB。当配置为*时表示所有用户或用户组。 MRS 3.x之前版本:mapred MRS 3.x及之后版本: mapred supergroup,System_administrator_186
  • 配置场景 执行一个MapReduce应用会产生两种类型日志文件:作业日志和任务日志。 作业日志由MRApplicationMaster产生,详细记录了作业启动时间、运行时间,每个任务启动时间、运行时间、Counter值等信息。此日志内容被HistoryServer解析以后用于查看作业执行的详细信息。 任务日志记录了每个运行在Container中的任务输出的日志信息。默认情况下,任务日志只会存放在各NodeManager的本地磁盘上。打开日志聚合功能后,NodeManager会在作业运行完成后将本地的任务日志进行合并,写入到HDFS中。 由于MapReduce的作业日志和任务日志(聚合功能开启的情况下)都保存在HDFS上。对于计算任务量大的集群,如果不进行合理的配置对日志文件进行定期归档和删除,日志文件将占用HDFS大量内存空间,增加集群负载。 日志归档是通过Hadoop Archives功能实现的,Hadoop Archives启动的并行归档任务数(Map数)与待归档的日志文件总大小有关。计算公式为:并行归档任务数=待归档的日志文件总大小/归档文件大小。
  • 操作步骤 通过调大如下的参数来进行AM调优。 参数入口: 在Yarn客户端的“mapred-site.xml”配置文件中调整如下参数。“mapred-site.xml”配置文件在客户端安装路径的conf目录下,例如“/opt/client/Yarn/config”。 参数 描述 默认值 yarn.app.mapreduce.am.resource.mb 该参数值必须大于下面参数的堆大小。单位:MB 1536 yarn.app.mapreduce.am.command-opts 传递到MapReduce ApplicationMaster的JVM启动参数。 MRS 3.x之前版本:-Xmx1024m -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -verbose:gc MRS 3.x及之后版本:-Xmx1024m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -verbose:gc -Djava.security.krb5.conf=${KRB5_CONFIG} -Dhadoop.home.dir=${BIGDATA_HOME}/ FusionInsight _HD_xxx/install/FusionInsight-Hadoop-xxx/hadoop
  • 配置描述 参数入口: 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 fs.trash.interval 以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间,会被删除。取值范围:1440~259200。 1440 fs.trash.checkpoint.interval 垃圾检查点间的间隔。单位:分钟。应小于等于“fs.trash.interval”的值。检查点程序每次运行时都会创建一个新的检查点并会移除fs.trash.interval分钟前创建的检查点。例如,系统每10分钟检测是否存在老化文件,如果发现有老化文件,则删除。对于未老化文件,则会存储在checkpoint列表中,等待下一次检查。 如果此参数的值设置为0,则表示系统不会检查老化文件,所有老化文件会被保存在系统中。 取值范围:0~fs.trash.interval。 说明: 不推荐将此参数值设置为0,这样系统的老化文件会一直存储下去,导致集群的磁盘空间不足。 60
  • 操作步骤 以下参数有如下两个配置入口: 服务器端配置 进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。具体操作请参考修改集群服务配置参数章节。 客户端配置 直接在客户端中修改相应的配置文件。 HDFS客户端配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/hdfs-site.xml。 Yarn客户端配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/yarn-site.xml。 MapReduce客户端配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 表1 多CPU内核设置 配置 参数 配置描述 节点容器槽位数 yarn.nodemanager.resource.memory-mb 参数解释:节点上YARN可使用的物理内存总量。单位:M。 默认值: MRS 3.x之前版本: 8192 MRS 3.x及之后版本: 16384 参数入口: MRS 3.x之前版本:需要在MRS控制台上进行配置。 MRS 3.x及之后版本:需要在FusionInsight Manager系统进行配置。 参数配置组合决定了每节点任务(map、reduce)的并发数。 如果所有的任务(map/reduce)需要读写数据至磁盘,多个进程将会同时访问一个磁盘。这将会导致磁盘的IO性能非常的低下。为了改善磁盘的性能,请确保客户端并发访问磁盘的数不大于3。 最大并发的container数量应该为[2.5 * Hadoop中磁盘配置数 ]。 mapreduce.map.memory.mb 参数解释:map任务的内存限制。单位:MB。 默认值:4096 参数入口:需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 mapreduce.reduce.memory.mb 参数解释:Reduce任务的内存限制。单位:MB。 默认值:4096 参数入口:需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 Map输出与压缩 mapreduce.map.output.compress 参数解释:指定了Map任务输出结果可以在网络传输前被压缩。这是一个per-job的配置。 默认值:true 参数入口:需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 Map任务所产生的输出可以在写入磁盘之前被压缩,这样可以节约磁盘空间并得到更快的写盘速度,同时可以减少至Reducer的数据传输量。需要在客户端进行配置。 在这种情况下,磁盘的IO是主要瓶颈。所以可以选择一种压缩率非常高的压缩算法。 编解码器可配置为Snappy,Benchmark测试结果显示Snappy是非常平衡以及高效的编码器。 mapreduce.map.output.compress.codec 参数解释:指定用于压缩的编解码器。 默认值:org.apache.hadoop.io.compress.Lz4Codec 参数入口:需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 Spills mapreduce.map.sort.spill.percent 参数解释:序列化缓冲区中的软限制。一旦达到该限制,线程将在后台开始将内容溢出到磁盘。 默认值:0.8 参数入口:需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 磁盘IO是主要瓶颈,合理配置“mapreduce.task.io.sort.mb”可以使溢出至磁盘的内容最小化。 数据包大小 dfs.client-write-packet-size 参数解释:配置项可以指定该数据包的大小。可以通过每个job进行指定。 默认值:262144 参数入口:需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/hdfs-site.xml。 当HDFS客户端写数据至数据节点时,数据会被累积,直到形成一个包。这个数据包会通过网络传输。 数据节点从HDFS客户端接收数据包,然后将数据包里的数据单线程写入磁盘。当磁盘处于并发写入状态时,增加数据包的大小可以减少磁盘寻道时间,从而提升IO性能。 dfs.client-write-packet-size = 262144
  • 设置HBase和HDFS的句柄数限制 联系集群管理员增加各用户的句柄数。该配置为操作系统的配置,并非HBase或者HDFS的配置。建议集群管理员根据HBase和HDFS的业务量及各操作系统用户的权限进行句柄数设置。如果某一个用户需对业务量很大的HDFS进行很频繁且很多的操作,则为此用户设置较大的句柄数,避免出现以上错误。 使用root用户登录集群所有节点机器或者客户端机器的操作系统,并进入“/etc/security”目录。 执行如下命令编辑“limits.conf”文件。 vi limits.conf 新增如下内容: hdfs - nofile 32768 hbase - nofile 32768 其中“hdfs”和“hbase”表示业务中用到的操作系统用户名称。 只有root用户有权限编辑“limits.conf”文件。 如果修改的配置不生效,请确认“/etc/security/limits.d”目录下是否有针对操作系统用户的其他nofile值。这样的值可能会覆盖“/etc/security/limits.conf”中配置的值。 如果用户需要对HBase进行操作,建议将该用户的句柄数设置为“10000”以上。如果用户需要对HDFS进行操作,建议根据业务量大小设置对应的句柄数,建议不要给太小的值。如果用户需要对HBase和HDFS操作,建议设置较大的值,例如“32768”。 使用如下命令查看某一用户的句柄数限制。 su - user_name ulimit -n 界面会返回此用户的句柄数限制值。如下所示: 8194
  • 基于标签的数据块摆放策略样例 例如某MRS集群有六个DataNode:dn-1,dn-2,dn-3,dn-4,dn-5以及dn-6,对应的IP为10.1.120.[1-6]。有六个目录需要配置标签表达式,Block默认备份数为3。 下面给出3种DataNode标签信息在“host2labels”文件中的表示方式,其作用是一样的。 主机名正则表达式 /dn-[1456]/ = label-1,label-2 /dn-[26]/ = label-1,label-3 /dn-[3456]/ = label-1,label-4 /dn-5/ = label-5 IP地址范围表示方式 10.1.120.[1-6] = label-1 10.1.120.1 = label-2 10.1.120.2 = label-3 10.1.120.[3-6] = label-4 10.1.120.[4-6] = label-2 10.1.120.5 = label-5 10.1.120.6 = label-3 普通的主机名表达式 /dn-1/ = label-1, label-2 /dn-2/ = label-1, label-3 /dn-3/ = label-1, label-4 /dn-4/ = label-1, label-2, label-4 /dn-5/ = label-1, label-2, label-4, label-5 /dn-6/ = label-1, label-2, label-3, label-4 目录的标签表达式设置结果如下: /dir1 = label-1 /dir2 = label-1 && label-3 /dir3 = label-2 || label-4[replica=2] /dir4 = (label-2 || label-3) && label-4 /dir5 = !label-1 /sdir2.txt = label-1 && label-3[replica=3,fallback=NONE] /dir6 = label-4[replica=2],label-2 标签表达式设置方式请参考hdfs nodelabel -setLabelExpression命令。 文件的数据块存放结果如下: “/dir1”目录下文件的数据块可存放在dn-1,dn-2,dn-3,dn-4,dn-5和dn-6六个节点中的任意一个。 “/dir2”目录下文件的数据块可存放在dn-2和dn-6节点上。Block默认备份数为3,表达式只匹配了两个DataNode节点,第三个副本会在集群上剩余的节点中选择一个DataNode节点存放。 “/dir3”目录下文件的数据块可存放在dn-1,dn-3,dn-4,dn-5和dn-6中的任意三个节点上。 “/dir4”目录下文件的数据块可存放在dn-4,dn-5和dn-6。 “/dir5”目录下文件的数据块没有匹配到任何一个DataNode,会从整个集群中任意选择三个节点存放(和默认选块策略行为一致)。 “/sdir2.txt”文件的数据块,两个副本存放在dn-2和dn-6节点上,虽然还缺失一个备份节点,但由于使用了fallback=NONE参数,所以只存放两个备份。 “/dir6”目录下文件的数据块在具备label-4的节点中选择2个节点(dn-3 -- dn-6),然后在label-2中选择一个节点,如果用户指定“/dir6”下文件副本数大于3,则多出来的副本均在label-2。
  • 多余块副本删除选择 如果块副本数超过参数“dfs.replication”值(即用户指定的文件副本数,可以参考修改集群服务配置参数进入HDFS服务全部配置页面,搜索对应参数查看),HDFS会删除多余块副本来保证集群资源利用率。 删除规则如下: 优先删除不满足任何表达式的副本。 示例:文件默认副本数为3 /test标签表达式为“LA[replica=1],LB[replica=1],LC[replica=1]”; /test文件副本分布的四个节点(D1~D4)以及对应标签(LA~LD): D1:LA D2:LB D3:LC D4:LD 则选择删除D4节点上的副本块。 如果所有副本都满足表达式,删除多于表达式指定的数量的副本。 示例:文件默认副本数为3 /test标签表达式为“LA[replica=1],LB[replica=1],LC[replica=1]”; /test文件副本分布的四个节点以及对应标签: D1:LA D2:LA D3:LB D4:LC 则选择删除D1或者D2上的副本块。 如果文件所有者或文件所有者的组不能访问某个标签,则优先删除映射到该标签的DataNode中的副本。
  • 块副本位置选择 NodeLabel支持对各个副本的摆放采用不同的策略,如表达式“label-1,label-2,label-3”,表示3个副本分别放到含有label-1、label-2、label-3的DataNode中,不同的副本策略用逗号分隔。 如果label-1,希望放2个副本,可以这样设置表达式:“label-1[replica=2],label-2,label-3”。这种情况下,如果默认副本数是3,则会选择2个带有label-1和一个label-2的节点;如果默认副本数是4,会选择2个带有label-1、一个label-2以及一个label-3的节点。可以注意到,副本数是从左到右依次满足各个副本策略的,但也有副本数超过表达式表述的情况,当默认副本数为5时,多出来的一个副本会放到最后一个节点中,也就是label-3的节点里。 当启用ACLs功能并且用户无权访问表达式中使用的标签时,将不会为副本选择属于该标签的DataNode。
  • 配置描述 DataNode节点标签配置 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 dfs.block.replicator.classname 配置HDFS的DataNode原则策略。 如果需要开启NodeLabeNodel功能,需要将该值设置为org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeLabel。 org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy host2tags 配置DataNode主机与标签的对应关系。 主机名称支持配置IP扩展表达式(如192.168.1.[1-128]或者192.168.[2-3].[1-128],且IP必须为业务IP),或者为前后加上 / 的主机名的正则表达式(如/datanode-[123]/或者/datanode-\d{2}/)。标签配置名称不允许包含 = / \ 字符。【注意】配置IP时必须是业务IP。 - host2tags配置项内容详细说明: 例如某MRS集群有20个DataNode:dn-1到dn-20,对应的IP地址为10.1.120.1到10.1.120.20,host2tags配置文件内容可以使用如下的表示方式。 主机名正则表达式: “/dn-\d/ = label-1”表示dn-1到dn-9对应的标签为label-1,即dn-1 = label-1,dn-2 = label-1,...dn-9 = label-1。 “/dn-((1[0-9]$)|(20$))/ = label-2”表示dn-10到dn-20对应的标签为label-2,即dn-10 = label-2,dn-11 = label-2,...dn-20 = label-2。 IP地址范围表示方式: “10.1.120.[1-9] = label-1”表示10.1.120.1到10.1.120.9对应的标签为label-1,即10.1.120.1 = label-1,10.1.120.2 = label-1,...10.1.120.9 = label-1。 “10.1.120.[10-20] = label-2”表示10.1.120.10到10.1.120.20对应的标签为label-2,即10.1.120.10 = label-2,10.1.120.11 = label-2,...10.1.120.20 = label-2。 基于标签的数据块摆放策略支持扩容减容场景: 当集群中新增加DataNode节点时,如果该DataNode对应的IP匹配host2tags配置项中的IP地址范围,或者该DataNode的主机名匹配host2tags配置项中的主机名正则表达式,则该DataNode节点会被设置成对应的标签。 例如“host2tags”配置值为10.1.120.[1-9] = label-1,而当前集群只有10.1.120.1到10.1.120.3三个数据节点。进行扩容后,又添加了10.1.120.4这个数据节点,则该数据节点会被设置成label-1的标签;如果10.1.120.3这个数据节点被删除或者退出服务后,数据块不会再被分配到该节点上。 设置目录/文件的标签表达式 在HDFS参数配置页面配置“path2expression”,配置HDFS目录与标签的对应关系。当配置的HDFS目录不存在时,也可以配置成功,新建不存在的同名目录,已设置的标签对应关系将在30分钟之内被继承。设置了标签的目录被删除后,新增一个同名目录,原有的对应关系也将在30分钟之内被继承。 命令行设置方式请参考hdfs nodelabel -setLabelExpression命令。 Java API设置方式通过NodeLabelFileSystem实例化对象调用setLabelExpression(String src, String labelExpression)方法。src为HDFS上的目录或文件路径,“labelExpression”为标签表达式。 开启NodeLabel特性后,可以通过命令hdfs nodelabel -listNodeLabels查看每个DataNode的标签信息。
  • 配置场景 用户需要通过数据特征灵活配置HDFS文件数据块的存储节点。通过设置HDFS目录/文件对应一个标签表达式,同时设置每个DataNode对应一个或多个标签,从而给文件的数据块存储指定了特定范围的DataNode。 当使用基于标签的数据块摆放策略,为指定的文件选择DataNode节点进行存放时,会根据文件的标签表达式选择出DataNode节点范围,然后在这些DataNode节点范围内,选择出合适的存放节点。 本章节适用于MRS 3.x及后续版本。 场景1 DataNodes分区场景。 场景说明: 用户需要让不同的应用数据运行在不同的节点,分开管理,就可以通过标签表达式,来实现不同业务的分离,指定业务存放到对应的节点上。 通过配置NodeLabel特性使得: /HBase下的数据存储在DN1、DN2、DN3、DN4节点上。 /Spark下的数据存储在DN5、DN6、DN7、DN8节点上。 图1 DataNode分区场景 通过hdfs nodelabel -setLabelExpression -expression 'LabelA[fallback=NONE]' -path /Hbase命令,给Hbase目录设置表达式。从图1中可知,“/Hbase”文件的数据块副本会被放置在有LabelA标签的节点上,即DN1、DN2、DN3、DN4。同理,通过hdfs nodelabel -setLabelExpression -expression 'LabelB[fallback=NONE]' -path /Spark命令,给Spark目录设置表达式。在“/Spark”目录下文件对应的数据块副本只能放置到LabelB标签上的节点,如DN5、DN6、DN7、DN8。 设置数据节点的标签参考配置描述。 如果同一个集群上存在多个机架,每个标签下可以有多个机架的DataNodes,以确保数据块摆放的可靠性。 场景2 多机架下指定副本位置场景 场景说明: 在异构集群中,需要分配一些特定的具有高可靠性的节点用以存放重要的商业数据,可以通过标签表达式指定副本位置,指定文件数据块的其中一个副本存放到高可靠性的节点上。 “/data”目录下的数据块,默认三副本情况下,其中至少有一个副本会被存放到RACK1或RACK2机架的节点上(RACK1和RACK2机架的节点为高可靠性节点),另外两个副本会被分别存放到RACK3和RACK4机架的节点上。 图2 场景样例 通过hdfs nodelabel -setLabelExpression -expression 'LabelA||LabelB[fallback=NONE],LabelC,LabelD' -path /data命令给“/data”目录设置表达式。 当向“/data”目录下写数据时,至少有一个数据块副本存放在LabelA或者LabelB标签的节点中,剩余的两个数据块副本会被存放在有LabelC和LabelD标签的节点上。
  • 配置场景 本章节适用于MRS 3.x及后续版本。 在现有的缺省DFSclient failover proxy provider中,一旦某进程中的一个NameNode发生故障,在同一进程中的所有HDFS client实例都会尝试再次连接NameNode,导致应用长时间等待超时。 当位于同一JVM进程中的客户端对无法访问的NameNode进行连接时,会对系统造成负担。为了避免这种负担,MRS集群搭载了NameNode blacklist功能。 在新的Blacklisting DFSClient failover provider中,故障的NameNode将被记录至一个列表中。DFSClient会利用这些信息,防止客户端再次连接这些NameNode。该功能被称为NameNode blacklisting。 例如,如下集群配置: NameNode:nn1、nn2 dfs.client.failover.connection.retries:20 单JVM中的进程:10个客户端 在上述集群中,如果当前处于active状态的nn1无法访问,client1将会对nn1进行20次重新连接,之后发生故障转移,client1将会连接至nn2。与此相同,client2至client10也会在对nn1进行20次重新连接后连接至nn2。这样会延长NameNode的整体故障恢复时间。 针对该情况,当client1试图连接当前处于active状态的nn1,但其已经发生故障时,nn1将会被添加至blacklist。这样其余client就不会连接已被添加至blacklist的nn1,而是会选择连接nn2。 若在任一时刻,所有NameNode都被添加至blacklist,则其内容会被清空,client会按照初始的NameNode list重新尝试连接。若再次出现任何故障,NameNode仍会被添加至blacklist。 图1 NameNode blacklisting状态图
  • 配置描述 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 NameNode blacklisting的相关参数 参数 描述 默认值 dfs.client.failover.proxy.provider.[nameservice ID] 利用已通过的协议创建namenode代理的Client Failover proxy provider类。 将参数值设置为“org.apache.hadoop.hdfs.server.namenode.ha.BlackListingFailoverProxyProvider”, 可使用从NameNode支持读的特性。 org.apache.hadoop.hdfs.server.namenode.ha.AdaptiveFailoverProxyProvider
  • 配置描述 参数入口: 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 dfs.namenode.delegation.token.max-lifetime 该参数为服务器端参数,设置Token的最大存活时间,单位为毫秒。取值范围:10000~10000000000000。 604800000 dfs.namenode.delegation.token.renew-interval 该参数为服务器端参数,设置Token renew的时间间隔,单位为毫秒。取值范围:10000~10000000000000。 86400000
  • 使用Flume客户端加密工具 安装Flume客户端后,配置文件的部分参数可能需要填写加密的字符,Flume客户端中提供了加密工具。 安装Flume客户端。 登录安装Flume客户端的节点,并切换到客户端安装目录。例如“/opt/FlumeClient”。 切换到以下目录 cd fusioninsight-flume-Flume组件版本号/bin 执行以下命令,加密原始信息: ./genPwFile.sh 输入两次待加密信息。 执行以下命令,查看加密后的信息: cat password.property 如果加密参数是用于Flume Server,那么需要到相应的Flume Server所在节点执行加密。需要使用omm用户执行加密脚本进行加密。 针对MRS 3.x之前版本加密路径为“/opt/Bigdata/MRS_XXX/install/FusionInsight-Flume-Flume组件版本号/flume/bin/genPwFile.sh”。 针对MRS 3.x及之后版本加密路径为“/opt/Bigdata/FusionInsight_Porter_XXX/install/FusionInsight-Flume-Flume组件版本号/flume/bin/genPwFile.sh”。其中XXX为产品的版本号。 父主题: Flume企业级能力增强
  • 操作步骤 参数入口: 进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。具体操作请参考修改集群服务配置参数章节。 参数 描述 默认值 mapreduce.map.speculative 设置是否并行执行某些映射任务的多个实例。true表示开启。 false mapreduce.reduce.speculative 设置是否并行执行某些reduce任务的多个实例。true表示开启。 false
  • 回答 原因分析 NameNode的主节点重启后,之前在ZooKeeper上建立的临时节点(/hadoop-ha/hacluster/ActiveStandbyElectorLock)就会被清理。同时,NameNode备节点发现该信息后进行抢占希望升主,所以它重新在ZooKeeper上建立了active的节点/hadoop-ha/hacluster/ActiveStandbyElectorLock。但是NameNode备节点通过客户端(ZKFC)与ZooKeeper建立连接时,由于网络问题、CPU使用率高、集群压力大等原因,出现了客户端(ZKFC)的session(0x144cb2b3e4b36ae4)与ZooKeeper服务端的session(0x164cb2b3e4b36ae4)不一致的问题,导致NameNode备节点的watcher没有感知到自己已经成功建立临时节点,依然认为自己还是备。 而NameNode主节点启动后,发现/hadoop-ha/hacluster目录下已经有active的节点,所以也无法升主,导致两个节点都为备。 解决方法 建议通过在FusionInsight Manager界面上重启HDFS的两个ZKFC加以解决。
  • 配置场景 当Yarn本地目录和DataNode目录配置在同一个磁盘时,具有较大容量的磁盘可以运行更多的任务,因此将有更多的中间数据存储在Yarn本地目录。 目前DataNode支持通过配置“dfs.datanode.du.reserved”来配置预留磁盘空间大小。配置较小的数值不能满足更大的磁盘要求。但对于更小的磁盘配置更大的数值将浪费大量的空间。 为了避免这种情况,添加一个新的参数“dfs.datanode.du.reserved.percentage”来配置预留磁盘空间占总磁盘空间大小的百分比,那样可以基于总的磁盘空间来预留磁盘百分比。 如果用户同时配置“dfs.datanode.du.reserved.percentage”和“dfs.datanode.du.reserved”,则采用这两个参数较大的数值作为DataNode的预留空间大小。 建议基于磁盘空间设置“dfs.datanode.du.reserved”或者“dfs.datanode.du.reserved.percentage”。
  • 配置场景 本章节操作适用于MRS 3.x及之后版本。 分布式缓存在两种情况下非常有用。 滚动升级 在升级过程中,应用程序必须保持文字内容(jar文件或配置文件)不变。而这些内容并非基于当前版本的Yarn,而是要基于其提交时的版本。一般情况下,应用程序(例如MapReduce、Hive、Tez等)需要进行完整的本地安装,将库安装至所有的集群机器(客户端及服务器端机器)中。当集群内开始进行滚动升级或降级时,本地安装的库的版本必然会在应用运行过程时发生改变。在滚动升级过程中,首先只会对少数NodeManager进行升级,这些NodeManager会获得新版本的软件。这导致了行为的不一致,并可能发生运行时错误。 同时存在多个Yarn版本 集群管理员可能会在一个集群内运行使用多个版本Yarn及Hadoop jars的任务。这在当前很难实现,因为jars已被本地化且只有一个版本。 MapReduce应用框架可以通过分布式缓存进行部署,且无需依赖安装中复制的静态版本。因此,可以在HDFS中存放多版本的Hadoop,并通过配置“mapred-site.xml”文件指定任务默认使用的版本。只需设置适当的配置属性,用户就可以运行不同版本的MapReduce,而无需使用部署在集群中的版本。 图1 具有多个版本NodeManagers及Applications的集群 在图1中:可以看出,应用程序可以使用HDFS中的Hadoop jars,而无需使用本地版本。因此在滚动升级中,即使NodeManager已经升级,应用程序仍然可以运行旧版本的Hadoop。
  • 操作场景 默认情况下,如果一个MR任务会产生大量的输出结果文件,那么该job在最后的commit阶段,会耗费较长的时间将每个task的临时输出结果commit到最终的结果输出目录。特别是在大集群中,大Job的commit过程会严重影响任务的性能表现。 针对以上情况,可以通过将以下参数“mapreduce.fileoutputcommitter.algorithm.version”配置为“2”,来提升MR Job commit阶段的性能。
  • 操作步骤 参数入口: 进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。具体操作请参考修改集群服务配置参数章节。 表1 参数说明 参数 描述 默认值 mapreduce.fileoutputcommitter.algorithm.version 用于指定Job的最终输出文件提交的算法版本,取值为“1”或“2”。 说明: 版本2为建议的优化算法版本。该算法通过让任务直接将每个task的输出结果提交到最终的结果输出目录,从而减少大作业的输出提交时间。 2
  • 配置描述 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 ha.health-monitor.rpc-timeout.ms zkfc对NameNode健康状态检查的超时时间。增大该参数值,可以防止出现双Active NameNode,降低客户端应用运行异常的概率。 单位:毫秒。取值范围:30000~3600000 180000 ipc.client.connect.max.retries.on.timeouts 客户端与服务端建立Socket连接超时时,客户端的重试次数。 取值范围:1~256 45 ipc.client.connect.timeout 客户端与服务端建立socket连接的超时时间。增大该参数值,可以增加建立连接的超时时间。 单位:毫秒。取值范围:1~3600000 20000
  • 操作场景 本章节适用于MRS 3.x及后续版本。 HDFS集群可能出现DataNode节点间磁盘利用率不平衡的情况,比如集群中添加新数据节点的场景。如果HDFS出现数据不平衡的状况,可能导致多种问题,比如MapReduce应用程序无法很好地利用本地计算的优势、数据节点之间无法达到更好的网络带宽使用率或节点磁盘无法利用等等。所以MRS集群管理员需要定期检查并保持DataNode数据平衡。 HDFS提供了一个容量均衡程序Balancer。通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使各DataNode磁盘使用率与HDFS集群磁盘使用率的偏差不超过阈值。图1和图2分别是Balance前后DataNode的磁盘使用率变化。 图1 执行均衡操作前DataNode的磁盘使用率 图2 执行均衡操作后DataNode的磁盘使用率 均衡操作时间估算受两个因素影响: 需要迁移的总数据量: 每个DataNode节点的数据量应大于(平均使用率-阈值)*平均数据量,小于(平均使用率+阈值)*平均数据量。若实际数据量小于最小值或大于最大值即存在不平衡,系统选择所有DataNode节点中偏差最多的数据量作为迁移的总数据量。 Balancer的迁移是按迭代(iteration)方式串行顺序处理的,每个iteration迁移数据量不超过10GB,每个iteration重新计算使用率的情况。 因此针对集群情况,可以大概估算每个iteration耗费的时间(可以通过执行Balancer的日志观察到每次iteration的时间),并用总数据量除以10GB估算任务执行时间。 由于按iteration处理,Balancer可以随时启动或者停止。
共100000条