Implante clusters Hadoop distribuídos ou pseudodistribuídos em instâncias ECS Linux para armazenamento e processamento de big data.
Contexto
O Apache Hadoop é um framework para processamento distribuído de conjuntos de dados em grande escala em clusters de computadores. Ele escala de um único servidor para milhares de máquinas, cada uma fornecendo computação e armazenamento locais. O Hadoop detecta e trata falhas na camada de aplicação, oferecendo alta disponibilidade sem depender de redundância de hardware.
Os componentes principais do Hadoop são o Hadoop Distributed File System (HDFS) e o MapReduce:
HDFS: Um sistema de arquivos distribuído para armazenar e ler dados de aplicações.
MapReduce: Um framework de computação distribuída que divide tarefas nas fases Map e Reduce e usa um agendador de tarefas (JobTracker) para executá-las nos nós do cluster.
|
Recurso |
Modo pseudodistribuído |
Modo totalmente distribuído |
|
Número de nós |
Nó único. Todos os services são executados em uma única máquina. |
Vários nós. Os services são distribuídos por várias máquinas. |
|
Utilização de recursos |
Usa os recursos de uma única máquina. |
Aproveita recursos de computação e armazenamento de várias máquinas. |
|
Tolerância a falhas |
Baixa. Um único ponto de falha torna todo o cluster indisponível. |
Alta. Suporta replicação de dados e configurações de alta disponibilidade. |
|
Cenários |
|
|
Implantação rápida
Clique em Execute Agora para abrir o Terraform Explorer, onde você pode visualizar e executar código Terraform para criar automaticamente um ambiente Hadoop em uma instância ECS.
Pré-requisitos
Suas instâncias ECS devem atender aos seguintes requisitos:
|
Ambiente |
Requisito |
|
|
Instância |
Pseudodistribuído |
1 instância |
|
Distribuído |
3 ou mais instâncias Nota
Adicione as instâncias a um conjunto de implantação que use a estratégia High Availability para melhorar a disponibilidade e simplificar o gerenciamento do cluster. |
|
|
Sistema operacional |
Linux |
|
|
Endereço IP público |
A instância possui um endereço IP público atribuído ou está associada a um Elastic IP Address (EIP). |
|
|
Grupo de segurança da instância |
Permita tráfego de entrada nas portas 22, 443, 8088 (interface web do Hadoop YARN) e 9870 (interface web do Hadoop NameNode). Nota
Para implantações distribuídas, permita também tráfego na porta 9868 (interface web do Hadoop Secondary NameNode). Consulte Manage security group rules. |
|
|
Java Development Kit (JDK) Este tópico usa Hadoop 3.2.4 e Java 8. Para outras versões, consulte Hadoop Java Versions. |
Versão do Hadoop |
Versão do Java |
|
Hadoop 3.3 |
Java 8 e Java 11 |
|
|
Hadoop 3.0.x~3.2.x |
Java 8 |
|
|
Hadoop 2.7.x~2.10.x |
Java 7 e Java 8 |
|
Procedimento
Distribuído
Planeje os nós antes de implantar o Hadoop. Este exemplo usa três instâncias: hadoop001 é o nó master, e hadoop002 e hadoop003 são nós worker.
|
Componente funcional |
hadoop001 |
hadoop002 |
hadoop003 |
|
HDFS |
|
DataNode |
|
|
YARN |
NodeManager |
|
NodeManager |
Etapa 1: Instalar o JDK
Instale o JDK em todos os nós.
-
Conecte-se à instância ECS como um usuário comum.
Consulte Connect to a Linux instance using Workbench.
ImportanteA comunidade Hadoop não recomenda executar o Hadoop como usuário root devido a problemas de segurança e permissões. Use um usuário não root, como
ecs-user. -
Baixe o pacote de instalação do JDK 1.8.
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
Descompacte o pacote de instalação do JDK 1.8.
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
Mova e renomeie a pasta de instalação do JDK.
Este exemplo renomeia a pasta de instalação do JDK para
java8. Você pode usar um nome diferente.sudo mv java-se-8u41-ri/ /usr/java8 -
Configure as variáveis de ambiente do Java.
Se você renomeou a pasta de instalação do JDK, substitua
java8nos comandos a seguir pelo nome real.sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile" sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile' source /etc/profile -
Verifique se o JDK está instalado.
java -versionA saída a seguir indica uma instalação bem-sucedida.
[ecs-user@hadoop001 ~]$ java -version openjdk version "1.8.0_41" OpenJDK Runtime Environment (build 1.8.0_41-b04) OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
Etapa 2: Configurar login SSH sem senha
Execute esta operação em todas as instâncias.
Configure o login SSH sem senha para que os nós possam se conectar sem autenticação por senha, simplificando o gerenciamento do cluster.
-
Configure os nomes de host e a resolução de hosts.
sudo vim /etc/hostsAdicione as informações
<Primary private IP address> <Hostname>de todas as instâncias ao arquivo/etc/hosts. Por exemplo:<Primary private IP address> hadoop001 <Primary private IP address> hadoop002 <Primary private IP address> hadoop003 -
Crie uma chave pública e uma chave privada.
ssh-keygen -t rsa[ecs-user@hadoop001 ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/ecs-user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ecs-user/.ssh/id_rsa. Your public key has been saved in /home/ecs-user/.ssh/id_rsa.pub. The key fingerprint is: SHA256:xxx ecs-user@hadoop001 The key's randomart image is: +---[RSA 3072]----+ | .E | | o | | | | o . . | | o + . | | ++oo S . | | o..* + o o | | o.o* o o + | |+=**.O . o | |=BB*O=*o | +----[SHA256]------+ -
Execute
ssh-copy-id <Hostname>e substitua o nome do host pelo nome correto. Por exemplo:Em
hadoop001, executessh-copy-id hadoop001,ssh-copy-id hadoop002essh-copy-id hadoop003. Após cada comando, insira yes e a senha da instância correspondente.ssh-copy-id hadoop001 ssh-copy-id hadoop002 ssh-copy-id hadoop003O login sem senha estará configurado quando a saída corresponder ao seguinte.
[ecs-user@hadoop001 ~]$ ssh-copy-id hadoop002 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ecs-user/.ssh/id_rsa.pub" The authenticity of host 'hadoop002 (172.20.153.127)' can't be established. ECDSA key fingerprint is SHA256:xxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ecs-user@hadoop002's password: Number of key(s) added: 1 Now try logging into the machine
Etapa 3: Instalar o Hadoop
Execute os comandos a seguir em todas as instâncias.
-
Baixe o pacote de instalação do Hadoop.
wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz -
Descompacte o pacote de instalação do Hadoop em
/opt/hadoop.sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ sudo mv /opt/hadoop-3.2.4 /opt/hadoop -
Configure as variáveis de ambiente do Hadoop.
sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile" source /etc/profile -
Modifique os arquivos de configuração
yarn-env.shehadoop-env.sh.sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh' sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh' -
Verifique se o Hadoop está instalado.
hadoop versionA saída a seguir indica uma instalação bem-sucedida.
[ecs-user@hadoop001 ~]$ hadoop version Hadoop 3.2.4 Source code repository Unknown -r 7e5d998xxx Compiled by ubuntu on 2022-07-12T11:58Z Compiled with protoc 2.5.0 From source with checksum ee031cxxx This command was run using /opt/hadoop/share/hadoop/common/hadoop-common-3.2.4.jar
Etapa 4: Configurar o Hadoop
Modifique os arquivos de configuração do Hadoop em todos os nós.
-
Modifique o arquivo de configuração do Hadoop
core-site.xml.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/core-site.xml -
No nó
<configuration></configuration>, insira o conteúdo a seguir.<!--Specify the NameNode address--> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop001:8020</value> </property> <!--Specify the directory to store files generated by Hadoop--> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/data</value> </property> <!--Configure the static user for HDFS web logon as hadoop--> <property> <name>hadoop.http.staticuser.user</name> <value>hadoop</value> </property>
-
-
Modifique o arquivo de configuração do Hadoop
hdfs-site.xml.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml -
No nó
<configuration></configuration>, insira o conteúdo a seguir.<!-- NameNode web endpoint --> <property> <name>dfs.namenode.http-address</name> <value>hadoop001:9870</value> </property> <!-- Secondary NameNode web endpoint --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop003:9868</value> </property>
-
-
Modifique o arquivo de configuração do Hadoop
yarn-site.xml.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/yarn-site.xml -
No nó
<configuration></configuration>, insira o conteúdo a seguir.<!--The method for NodeManager to obtain data is shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--Specify the YARN (ResourceManager) address--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop002</value> </property> <!--Specify the whitelist of environment variables that NodeManager can pass to containers--> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
-
-
Modifique o arquivo de configuração do Hadoop
mapred-site.xml.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/mapred-site.xml -
No nó
<configuration></configuration>, insira o conteúdo a seguir.<!--Tell Hadoop to run MapReduce (MR) on YARN--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
-
Modifique o arquivo de configuração do Hadoop
workers.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/workers -
No arquivo
workers, insira as informações das instâncias.hadoop001 hadoop002 hadoop003
-
Etapa 5: Iniciar o Hadoop
-
Inicialize o
namenode.AvisoInicialize o
namenodenas três instâncias apenas durante a primeira inicialização.hadoop namenode -format -
Inicie o Hadoop.
ImportanteA comunidade Hadoop não recomenda executar o Hadoop como usuário root devido a problemas de segurança e permissões. Use um usuário não root, como
ecs-user.-
Se for necessário executar o Hadoop como root, compreenda o modelo de controle de acesso e os riscos associados antes de modificar os arquivos de configuração a seguir.
Nota: Executar o Hadoop como root introduz riscos graves de segurança, incluindo, mas não se limitando a, violações de dados, maior vulnerabilidade a malware que pode obter privilégios de root e problemas inesperados de permissão. Consulte a documentação oficial do Hadoop.
-
Em
hadoop001, executestart-dfs.shpara iniciar o service HDFS.Este script inicia NameNode, SecondaryNameNode e DataNode.
start-dfs.shO HDFS estará em execução quando a saída do
jpscorresponder ao seguinte.[ecs-user@hadoop003 ~]$ jps 1347 SecondaryNameNode 2260 Jps 1256 DataNode [ecs-user@hadoop002 ~]$ jps 3538 Jps 1307 DataNode [ecs-user@hadoop001 ~]$ jps 1589 NameNode 1750 DataNode 2844 Jps -
Em
hadoop002, executestart-yarn.shpara iniciar o service YARN.Este script inicia ResourceManager e NodeManager.
start-yarn.shO YARN estará em execução quando a saída corresponder ao seguinte.
[ecs-user@hadoop002 ~]$ start-yarn.sh Starting resourcemanager Starting nodemanagers
-
Visualize os processos iniciados nos três nós.
jpsOs processos iniciados são os seguintes.
[ecs-user@hadoop003 ~]$ jps 1347 SecondaryNameNode 1256 DataNode 1481 NodeManager 1759 Jps [ecs-user@hadoop002 ~]$ jps 2192 Jps 1686 NodeManager 1499 ResourceManager 1307 DataNode [ecs-user@hadoop001 ~]$ jps 2355 Jps 1589 NameNode 1750 DataNode 2073 NodeManager -
No navegador, insira
http://<Public IP address of hadoop002 ECS instance>:8088para acessar a interface web do YARN.Visualize o uso de recursos do cluster, o status dos jobs MapReduce e informações de fila.
ImportantePermita tráfego de entrada na porta 8088 no grupo de segurança. Caso contrário, a interface web ficará inacessível. Consulte Add a security group rule.
A página All Applications exibe métricas do cluster: Active Nodes é 3, Total Resources é
memory:24 GB, vCores:24, o tipo de agendador é Capacity Scheduler e nenhuma aplicação foi enviada ou está em execução no momento. -
No navegador, insira
http://<Public IP address of hadoop001 ECS instance>:9870para acessar a interface web do NameNode. Insirahttp://<Public IP address of hadoop003 ECS instance>:9868para acessar a interface web do SecondaryNameNode.Visualize o status do HDFS, a integridade do cluster, os nós ativos e os logs do NameNode.
A página a seguir indica que o ambiente distribuído foi criado.
ImportantePermita tráfego de entrada na porta 9870 no grupo de segurança. Caso contrário, a interface web ficará inacessível. Consulte Add a security group rule.
Após o acesso bem-sucedido, a interface web do NameNode exibe a página Overview. O título da página mostra que o NameNode está no estado active. A seção Summary mostra o status de segurança e tempo de execução do cluster, incluindo Security is off e Safemode is off. Abaixo, são exibidos a capacidade de armazenamento e o uso do cluster (por exemplo, Configured Capacity, DFS Used, DFS Remaining).
Pseudodistribuído
Etapa 1: Instalar o JDK
-
Conecte-se à instância ECS como um usuário comum.
Consulte Connect to a Linux instance using Workbench.
ImportanteA comunidade Hadoop não recomenda executar o Hadoop como usuário root devido a problemas de segurança e permissões. Use um usuário não root, como
ecs-user. -
Baixe o pacote de instalação do JDK 1.8.
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
Descompacte o pacote de instalação do JDK 1.8.
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
Mova e renomeie a pasta de instalação do JDK.
Este exemplo renomeia a pasta de instalação do JDK para
java8. Você pode usar um nome diferente.sudo mv java-se-8u41-ri/ /usr/java8 -
Configure as variáveis de ambiente do Java.
Se você renomeou a pasta de instalação do JDK, substitua
java8nos comandos a seguir pelo nome real.sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile" sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile' source /etc/profile -
Verifique se o JDK está instalado.
java -versionA saída a seguir indica uma instalação bem-sucedida.
[ecs-user@hadoop001 ~]$ java -version openjdk version "1.8.0_41" OpenJDK Runtime Environment (build 1.8.0_41-b04) OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
Etapa 2: Configurar login SSH sem senha
Um único nó também requer login SSH sem senha. Caso contrário, a inicialização do NameNode e do DataNode falhará com um erro de permissão negada.
-
Crie uma chave pública e uma chave privada.
ssh-keygen -t rsa[ecs-user@hadoop001 ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/ecs-user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ecs-user/.ssh/id_rsa. Your public key has been saved in /home/ecs-user/.ssh/id_rsa.pub. The key fingerprint is: SHA256:xxx ecs-user@hadoop001 The key's randomart image is: +---[RSA 3072]----+ | .E | | o | | o . . | | o + . | | ++oo S . | | o..* + o o | | o.o* o o + | |+=**.O . o | |=BB*O-*o | +----[SHA256]-----+ -
Adicione a chave pública ao arquivo
authorized_keys.cd .ssh cat id_rsa.pub >> authorized_keys
Etapa 3: Instalar o Hadoop
-
Baixe o pacote de instalação do Hadoop.
wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz -
Descompacte o pacote de instalação do Hadoop em
/opt/hadoop.sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ sudo mv /opt/hadoop-3.2.4 /opt/hadoop -
Configure as variáveis de ambiente do Hadoop.
sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile" source /etc/profile -
Modifique os arquivos de configuração
yarn-env.shehadoop-env.sh.sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh' sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh' -
Verifique se o Hadoop está instalado.
hadoop versionA saída a seguir indica uma instalação bem-sucedida.
[ecs-user@hadoop001 ~]$ hadoop version Hadoop 3.2.4 Source code repository Unknown -r 7e5d998xxx Compiled by ubuntu on 2022-07-12T11:58Z Compiled with protoc 2.5.0 From source with checksum ee031cxxx This command was run using /opt/hadoop/share/hadoop/common/hadoop-common-3.2.4.jar
Etapa 4: Configurar o Hadoop
-
Modifique o arquivo de configuração do Hadoop
core-site.xml.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/core-site.xml -
No nó
<configuration></configuration>, insira o conteúdo a seguir.<property> <name>hadoop.tmp.dir</name> <value>file:/opt/hadoop/tmp</value> <description>location to store temporary files</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property>
-
-
Modifique o arquivo de configuração do Hadoop
hdfs-site.xml.-
Abra o arquivo para edição.
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml -
No nó
<configuration></configuration>, insira o conteúdo a seguir.<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop/tmp/dfs/data</value> </property>
-
Etapa 5: Iniciar o Hadoop
-
Inicialize o
namenode.hadoop namenode -format -
Inicie o Hadoop.
ImportanteA comunidade Hadoop não recomenda executar o Hadoop como usuário root devido a problemas de segurança e permissões. Use um usuário não root, como
ecs-user.-
Se for necessário executar o Hadoop como root, compreenda o modelo de controle de acesso e os riscos associados antes de modificar os arquivos de configuração a seguir.
Nota: Executar o Hadoop como root introduz riscos graves de segurança, incluindo, mas não se limitando a, violações de dados, maior vulnerabilidade a malware que pode obter privilégios de root e problemas inesperados de permissão. Consulte a documentação oficial do Hadoop.
-
Inicie o service HDFS.
Este script inicia NameNode, SecondaryNameNode e DataNode.
start-dfs.shO HDFS estará em execução quando a saída corresponder ao seguinte.
[ecs-user@hadoop001 ~]$ start-dfs.sh Starting namenodes on [localhost] Starting datanodes Starting secondary namenodes [hadoop001] -
Inicie o service YARN.
Este script inicia ResourceManager, NodeManager e ApplicationHistoryServer.
start-yarn.shO YARN estará em execução quando a saída corresponder ao seguinte.
[ecs-user@hadoop001 ~]$ start-yarn.sh Starting resourcemanager Starting nodemanagers
-
Visualize os processos iniciados.
jpsOs processos iniciados são os seguintes.
[ecs-user@hadoop001 ~]$ jps 13648 NameNode 14513 NodeManager 13811 DataNode 14024 SecondaryNameNode 14298 ResourceManager 14861 Jps -
No navegador, insira
http://<Public IP address of the ECS instance>:8088para acessar a interface web do YARN.Visualize o uso de recursos do cluster, o status dos jobs MapReduce e informações de fila.
ImportantePermita tráfego de entrada na porta 8088 no grupo de segurança. Caso contrário, a interface web ficará inacessível. Consulte Add a security group rule.
Após o acesso bem-sucedido, a página exibe a visão geral de All Applications. Em Cluster Metrics, Active Nodes é 1 e Total Resources é memory:8 GB, vCores:8, indicando que o YARN ResourceManager está funcionando normalmente.
-
No navegador, insira
http://<Public IP address of the ECS instance>:9870para acessar a interface web do NameNode.Visualize o status do HDFS, a integridade do cluster, os nós ativos e os logs do NameNode.
Após o acesso bem-sucedido, a interface web do NameNode confirma que o ambiente pseudodistribuído foi criado.
ImportantePermita tráfego de entrada na porta 9870 no grupo de segurança. Caso contrário, a interface web ficará inacessível. Consulte Add a security group rule.
Mais operações
Criar um grupo consistente de snapshots
Para Hadoop distribuído, use um grupo consistente de snapshots para garantir a consistência dos dados em todo o cluster. Consulte Create a snapshot-consistent group.
Operações relacionadas ao Hadoop
Para operações do HDFS, consulte Common HDFS commands.
Referências
Para usar o ambiente integrado de big data da Alibaba Cloud no ECS, consulte Quickly create and use a Data Lake Analytics cluster.
Para usar um ambiente de desenvolvimento e governança de data lake, consulte Advanced: Analyze best-selling product categories from order data.